web-dev-qa-db-fra.com

FileUpload.hasFile est toujours False

J'ai un contrôle FileUpload (et ce n'est pas dans un UpdatePanel) et sa propriété hasFile est toujours False.

   <asp:FileUpload ID="certificateUploader" runat="server"/>

Toute pensée?

35
Alaa.Ali

Ajoutez un déclencheur pour votre UpdatePanel

<Triggers>
   <asp:PostBackTrigger ControlID="btnCertificateUpload" />
</Triggers>

Cela forcera une publication lorsque vous cliquerez sur le bouton de téléchargement.

Ajoutez également la ligne ci-dessous à la

Page.Form.Attributes.Add("enctype", "multipart/form-data");
49

Vous ne pouvez pas télécharger de fichiers à l'aide de AJAX => vous ne devez pas placer un contrôle FileUpload dans un UpdatePanel car ce UpdatePanel envoie une requête AJAX au serveur).

13
Darin Dimitrov

J'ai également téléchargé un fichier à l'aide du contrôle FileUpload, mais la propriété HasFile a renvoyé false. Il s'avère que FileUpload.HasFile est également faux si vous téléchargez un fichier vide. Dans ce cas, l'ajout de texte au fichier que vous souhaitez télécharger rendra la propriété Hasfile vraie.

10
Sego

Pour compléter l'exemple donné par le support @dbFrameIT:

        <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);
        }
    }
7
BernieSF

pendant tout le temps, il s'agissait des autorisations que j'avais (ou je n'avais pas besoin d'être plus spécifique) sur le fichier, j'essayais 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.

2
Alaa.Ali

Parfois, fileUpload a des problèmes. Vous pouvez utiliser une entrée simple:

<input id="filMyFile" type="file" runat="server"></input>

Dans le code, enregistrez le fichier sur le serveur:

HttpPostedFile myFile = filMyFile.PostedFile;           
string fullPath=Server.MapPath("~/UploadDocuments/") + myFile.FileName;
myFile.SaveAs(fullPath);

Et le fichier sera enregistré dans le dossier UploadDocuments de votre application ASP.NET (serveur)

0
igor_bugaenko