2010-05-07 62 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,现在一切正常。