48 votes

FileUpload.hasFile est toujours False

J'ai un FileUpload (et il n'est pas à l'intérieur d'un UpdatePanel ) et son hasFile est toujours False .

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

Une idée ?

0 votes

Soyez clair dans votre question. Que se passe-t-il exactement ?

0 votes

Lorsque je clique sur le bouton browse et que je recherche un fichier, que j'en sélectionne un et que je clique sur open, je peux voir le chemin du fichier directement sur le contrôle fileUploader, lorsque je clique sur le bouton Save (personnalisé pour mon application), je vérifie s'il .hasFile et il renvoie False à chaque fois.

0 votes

J'ai édité ma Question avec plus de code sauf pour les deux dernières lignes qui n'ont pas pu être copiées.

60voto

dbFrameIT Support Points 591

Ajoutez un déclencheur pour votre UpdatePanel

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

Ceci forcera un postback lorsque le bouton de téléchargement est cliqué.

Ajoutez également la ligne suivante au Page_Load

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

0 votes

Je vais certainement l'essayer :)

0 votes

Et qu'en est-il du même problème avec un FileUpload qui n'est pas à l'intérieur d'un UpdatePanel (comme le dit la question) ?

1 votes

Si quelqu'un qui ne connaît pas Update Panel et FileUpload trouve cette réponse à partir d'un moteur de recherche (comme moi), jetez un coup d'œil à ce lien. c-sharpcorner.com/uploadfile/prathore/ Cela m'a également aidé. Quoi qu'il en soit, merci pour votre réponse courte mais efficace.

17voto

Darin Dimitrov Points 528142

Vous ne pouvez pas télécharger des fichiers en utilisant AJAX => vous ne devriez pas placer un contrôle FileUpload à l'intérieur d'un UpdatePanel car cet UpdatePanel envoie une requête AJAX au serveur.

0 votes

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

0 votes

C'était mon problème ! Merci beaucoup. Je n'avais même pas l'uploader de fichier dans le panneau de mise à jour mais mon panneau de mise à jour avait le bouton submit de la page comme trigger async.

17voto

Sego Points 150

J'ai également téléchargé un fichier à l'aide du contrôle FileUpload, mais la propriété HasFile renvoie un message faux. Il s'avère que FileUpload.HasFile est également faux si vous téléchargez un fichier vide. Dans ce cas, si vous ajoutez du texte au fichier que vous souhaitez télécharger, la propriété HasFile renverra un message vrai.

1 votes

J'ai rencontré le même problème.

12voto

BernieSF Points 718

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

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

3voto

Alaa.Ali Points 1142

Pendant tout ce temps, il s'agissait des autorisations que j'avais (ou que je n'avais pas pour être plus précis) sur le fichier que 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 articles.

0 votes

Pourriez-vous développer, je pense que je suis confronté aux mêmes problèmes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X