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?

32
demandé sur adripanico 2012-03-13 15:02:15

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");
43
répondu dbFrameIT Support 2012-05-08 18:32:12

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.

10
répondu Darin Dimitrov 2012-03-13 11:03:29

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.

10
répondu Sego 2015-05-08 13:37:57
        <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
répondu BernieSF 2016-03-17 17:52:17

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.

3
répondu Alaa.Ali 2012-03-13 19:05:21

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)

1
répondu igor_bugaenko 2018-07-25 12:39:56

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.

0
répondu user3096335 2014-01-22 17:54:29