FileUpload ne fonctionne pas quand il est imbriqué dans UpdatePanel? C#

 <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                <ContentTemplate>
                        <asp:FileUpload onchange="clickTheButton();" ID="FileUpload1" runat="server" />
                </ContentTemplate>
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="Button1" />
                </Triggers>
</asp:UpdatePanel>
<!-Le bouton 1 est à l'extérieur du panneau de mise à jour et le javascript qui est lancé lorsqu'un utilisateur ajoute un fichier dans la boîte de téléchargement est ceci:

function clickTheButton() {
            document.getElementById('<%= Button1.ClientID %>').click();
        }

Le problème est simple. FileUpload1.HasFile = = false. Je ne sais pas pourquoi, mais quand je le mets dans le panneau de mise à jour, il cesse de fonctionner.

j'en ai vu d'autres fils sur ce. Mais aucun d'entre eux ne répond Pourquoi cela se produit, ils pointent juste des choses que vous pouvez télécharger.

EDIT: Vraiment ma principale raison pour vouloir en faire c'est pour que je puisse obtenir un ..Téléchargement Du Fichier.. Balise de pop-up pendant que le client est en téléchargement sur le serveur et une fois qu'il a terminé, l'afficher dans un datalist. J'ai juste ne peux pas obtenir le UpdateProgress de travail.

16
demandé sur Jason 2010-01-21 11:58:57

3 réponses

Fondamentalement, vous avez juste besoin de faire votre bouton faire une publication complète pour envoyer le fichier. Assurez-vous aussi que vous avez ceci.Forme.Enctype = "multipart / form-data"; défini dans votre code, ou vous pouvez mettre dans cette page. AsyncPostbacks ne fonctionne pas avec les fichiers pour des raisons de sécurité, comme mentionné, sans hacks. (Je n'ai jamais réussi à le faire fonctionner).

 <asp:UpdatePanel ID="UpdatePanel1" runat="server">
      <ContentTemplate>
           <asp:FileUpload onchange="clickTheButton();" ID="FileUpload1" runat="server" />
      </ContentTemplate>
      <Triggers>
         <asp:PostBackTrigger ControlID="Button1" />
      </Triggers>
 </asp:UpdatePanel>
14
répondu jamone 2010-01-21 14:40:54

pour des raisons de sécurité, les navigateurs ne vous permettent pas de poster des fichiers via javascript. Imaginez si je pouvais écrire un peu de javascript pour soumettre de manière asynchrone le contenu de votre dossier Mes Documents à mon serveur.

donc les méthodes javascript-ish pour afficher le formulaire, comme la XMLHttpRequest utilisée par UpdatePanel, ne fonctionneront pas.

ce post décrit un travail décent si vous êtes sur 3.5 SP1. http://geekswithblogs.net/ranganh/archive/2009/10/01/fileupload-in-updatepanel-asp.net-like-gmail.aspx

ce post décrit un couple de solutions si vous préférez ne pas utiliser le AjaxControlToolkit. http://geekswithblogs.net/ranganh/archive/2008/04/01/file-upload-in-updatepanel-asp.net-ajax.aspx

4
répondu Kyle Chafin 2010-01-21 14:34:04

le téléchargement de fichier ne fonctionnera pas avec un post retour partiel. Il suffit donc d'ajouter cette ligne à votre page load

ScriptManager.GetCurrent(this).RegisterPostBackControl(this.YourControlID);

Ou utiliser PostBackTrigger.

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

ou vous avez besoin d'un contrôle spécial AsyncFileUpload tel que défini dans AjaxControl Toolkit.

<ajaxToolkit:AsyncFileUpload OnClientUploadError="uploadError"
     OnClientUploadComplete="uploadComplete" runat="server"
     ID="AsyncFileUpload1" Width="400px" UploaderStyle="Modern"
     UploadingBackColor="#CCFFFF" ThrobberID="myThrobber" />

Vous pouvez vérifier l' ici.

1
répondu Litisqe Kumar 2017-05-23 10:31:22