2010-05-07 88 views
3

我有一個UpdatePanel,它有一個上傳控件和一個上傳按鈕。該按鈕被設置爲觸發器,但該按鈕的事件處理程序無法在第一個回發中執行。ASP.NET - 用PostBack觸發器的FileUpload

我的ASPX代碼:

<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> 

按鈕的作品沒有失敗第二次及以後,只是沒有第一。這有什麼理由嗎?

+0

解決此問題有什麼好運氣? – Jonathan 2010-05-12 12:53:50

+0

不幸的不是。行爲似乎是間歇性的,這是最糟糕的錯誤類型。 – Echilon 2010-05-14 13:04:32

+0

你可以添加服務器端代碼嗎? – chapluck 2010-05-26 12:21:27

回答

1

我不知道爲什麼會發生這種情況。但是,您可以嘗試通過覆蓋aspx.cs文件中的OnInit頁面循環事件來自行添加事件。請記得從您的HTML頁面中移除Click事件。

protected override void OnInit(EventArgs e) 
{ 

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

或者觸發可能還需要正下方的UpdatePanel的標籤

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

謝謝,但這沒有奏效.. – Echilon 2010-05-07 15:09:30

1

也許它做一個AJAX回發的第一時間定位?在您的UpdatePanel上,嘗試添加屬性ChildrenAsTriggers="false"

這樣會停止在UpdatePanel任何控件引起異步回發,所以對你導致回發的每個控件,你必須在UpdatePanel中的Triggers部分添加AsyncPostBackTrigger

+0

不是我想到的,但它沒有效果。 – Echilon 2010-05-07 15:09:46

3

需要在頁面的表單標籤中添加enctype =「multipart/form-data」。

面臨着同樣的問題,上述工作圍繞使它上傳文件中的第一次嘗試。希望有人會覺得它有用。

0

根據anbalagan的回答和另一個問題的答案,您應該將表單元素的enctype屬性更改爲'multipart/form-data'。正如this question's最佳答案中所述,應在每次編寫客戶端代碼並需要將文件發佈到服務器時使用「multipart/form-data」。使用FileUpload控件。

我和你的問題一樣,改變了表單的enctype,現在一切正常。