FileUpload.hasFile est toujours faux
j'ai un FileUpload
contrôle (et ce n'est pas à l'intérieur d'un UpdatePanel
) et ses hasFile
la propriété est toujours False
.
<asp:FileUpload ID="certificateUploader" runat="server"/>
de Toute pensée?
7 réponses
Ajouter un déclencheur pour votre UpdatePanel
<Triggers>
<asp:PostBackTrigger ControlID="btnCertificateUpload" />
</Triggers>
Cela va forcer une publication lorsque le bouton de téléchargement est cliqué.
ajoutez aussi la ligne ci-dessous à la Page_Load
Page.Form.Attributes.Add("enctype", "multipart/form-data");
vous ne pouvez pas télécharger des fichiers en utilisant AJAX => vous ne devriez pas placer un contrôle de téléchargement de fichiers à l'intérieur d'un UpdatePanel parce que ce UpdatePanel envoie une requête AJAX au serveur.
j'ai aussi téléchargé un fichier en utilisant le contrôle FileUpload, mais la propriété HasFile a retourné false. Que FileUpload.HasFile est également faux si vous téléchargez un fichier vide. Dans ce cas, ajouter du texte au fichier que vous voulez télécharger rendra la déclaration de propriété Hasfile vraie.
<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Always" runat="server">
<ContentTemplate>
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="UploadButton" runat="server" Text="Upload Selected File" OnClick="UploadButton_Click" />
<asp:Label ID="UploadDetails" runat="server" Text=""></asp:Label>
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="UploadButton" />
</Triggers>
</asp:UpdatePanel>
votre code derrière (c#)
protected void UploadButton_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile == false)
{
UploadDetails.Text = "Please first select a file to upload...";
}
else
{
string FileName = FileUpload1.FileName;
UploadDetails.Text = string.Format(
@"Uploaded file: {0}<br />
File size (in bytes): {1:N0}<br />
Content-type: {2}",
FileName,
FileUpload1.FileBytes.Length,
FileUpload1.PostedFile.ContentType);
// Save the file
string filePath = Server.MapPath("~/Brochures/" + FileUpload1.FileName);
FileUpload1.SaveAs(filePath);
}
}
tout le temps, il était sur les autorisations, j'ai eu(ou ne pas être plus précis) sur le fichier suis en train de télécharger, j'ai accordé à l'utilisateur les autorisations suffisantes et tout s'est bien passé.
merci beaucoup pour votre aide et vos messages.
parfois fileUpload a des problèmes. Vous pouvez utiliser une entrée toute simple:
<input id="filMyFile" type="file" runat="server"></input>
Dans le code enregistrer le fichier sur le serveur:
HttpPostedFile myFile = filMyFile.PostedFile;
string fullPath=Server.MapPath("~/UploadDocuments/") + myFile.FileName;
myFile.SaveAs(fullPath);
et le fichier enregistrera dans le dossier UploadDocuments dans votre ASP.NET application (server)
vous pouvez essayer d'enlever votre bouton du Panneau UpdatePanel; Autant que je sache, UpdatePanels met toujours à jour quand quelque chose à l'intérieur d'un autre panneau de mise à jour est mis à jour, donc si votre bouton postback, votre contrôle FileUpload postback aussi et perdre la référence du fichier.