2010-05-07 7 views
3

J'ai un UpdatePanel qui a un contrôle de téléchargement et un bouton pour télécharger. Le bouton est défini en tant que déclencheur, mais le gestionnaire d'événements du bouton ne s'exécute pas sur le premier PostBack.ASP.NET - FileUpload avec PostBack Trigger

Code Mon ASPX est:

<asp:UpdatePanel ID="updPages" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <div class="tabs"> 
      <ul> 
       <li><asp:LinkButton ID="lnkContentsPages" runat="server" OnClick="updateContents" CommandArgument="pages">Pages</asp:LinkButton></li> 
     <%-- these tabs change the ActiveViewIndex to show a different UserControl --%> 
       <li><asp:LinkButton ID="lnkContentsImages" runat="server" OnClick="updateContents" CommandArgument="images">Images</asp:LinkButton></li> 
      </ul> 
      <div class="tabbedContent"> 
       <asp:MultiView runat="server" ID="mltContentsInner" ActiveViewIndex="0"> 
        <asp:View ID="viwContentsImages" runat="server"> 
         // ajax usercontrol for a list of images - works fine with ajax 
         <fieldset> 
          <legend>Upload New</legend> 
          <div class="formRow"> 
           <asp:Label ID="lblFile" runat="server" Text="Filename" AssociatedControlID="uplFile" /> 
           <asp:FileUpload ID="uplFile" runat="server" /> 
          </div> 
          <div class="formRow"> 
           <asp:Label ID="lblImageDescription" runat="server" Text="Description" AssociatedControlID="txtImageDescription" /> 
           <asp:TextBox runat="server" ID="txtImageDescription" /> 
          </div> 
          <asp:Button ID="btnUpload" runat="server" Text="Upload" CssClass="c3button btnUpload" CausesValidation="false" OnClick="btnUpload_Click" /> 
         </fieldset> 
        </asp:View> 
        <asp:View ID="viwContentsPages" runat="server"> 
         // ajax usercontrol - works fine with ajax 
        </asp:View> 
       </asp:MultiView> 
      </div> 
     </div> 
    </ContentTemplate> 
    <Triggers> 
     <asp:PostBackTrigger ControlID="btnUpload" /> 
    </Triggers> 
</asp:UpdatePanel> 

Les bouton fonctionne sans échouer sur les temps deuxième et les suivants, mais pas la première. Y a-t-il une raison quelconque pour cela?

+0

Avez-vous de la chance pour résoudre ce problème? – Jonathan

+0

Malheureusement pas. Le comportement semble intermittent, ce qui est le pire type de bug. – Echilon

+0

pouvez-vous ajouter le code côté serveur? – chapluck

Répondre

1

Je ne sais pas pourquoi cela se produit. Toutefois, vous pouvez tenter d'ajouter l'événement vous-même en remplaçant l'événement de cycle de page OnInit dans le fichier aspx.cs. N'oubliez pas de supprimer l'événement Click de votre page HTML.

protected override void OnInit(EventArgs e) 
{ 

btnUpload.Click+= new EventHandler(btnUpload_Click); 
base.OnInit(e); 
} 

Alternativement, le déclencheur pourrait avoir besoin d'être placé directement sous le UpdatePanel Tag

<asp:UpdatePanel ID="updPages" runat="server" UpdateMode="Conditional"> 
<Triggers> 
     <asp:PostBackTrigger ControlID="btnUpload" /> 
    </Triggers> 
+0

Merci, mais cela n'a pas fonctionné .. – Echilon

1

Peut-être qu'il fait un AJAX Postback la première fois? Sur votre UpdatePanel, essayez d'ajouter l'attribut ChildrenAsTriggers="false".

Cela arrêtera les contrôles dans les UpdatePanel provoquant postbacks asynchrones, donc pour chaque contrôle que vous voulez pour causer un postback, vous devrez ajouter une AsyncPostBackTrigger dans la section Triggers du UpdatePanel.

+0

Pas quelque chose que je pensais mais il n'a eu aucun effet. – Echilon

3

besoin d'ajouter enctype = "multipart/form-data" dans la balise de formulaire de la page.

face au même problème et le travail ci-dessus autour de fait, il charger le fichier dans la première tentative. J'espère que quelqu'un le trouvera utile.

0

Selon la réponse d'anbalagan et une réponse d'une autre question, vous devez remplacer la propriété enctype de l'élément de formulaire par 'multipart/form-data'. Comme il est dit dans this question's meilleure réponse, «multipart/form-data» devrait être utilisé chaque fois que vous écrivez le code côté client et devez poster des fichiers sur le serveur, par exemple. utilisez les contrôles FileUpload.

J'ai eu le même problème que le vôtre, changé l'enctype du formulaire et maintenant tout fonctionne bien.