FileUpload + UpdatePanel在第一次单击时不起作用

时间:2011-12-05 16:20:32

标签: c# asp.net

这不仅仅是另一个FileUpload + UpdatePanel问题。

正如许多类似帖子中所述,我的表单上有一个UpdatePanel和一个FileUpload控件。我还为我的上传按钮设置了PostBackTrigger。 有用。问题是它在第一次点击时永远不会起作用。那就是:

我点击浏览,选择我的文件,按上传。什么都没发生(fupld.HasFile = false);

我再次点击浏览,选择任何文件(相同或其他文件),按上传即可正常工作。

<asp:UpdatePanel ID="upGeneral" runat="server" >
   <ContentTemplate>
       ...
       <table id="tabPage10" runat="server" visible="false" width="100%" >
          <tr>
              ...
              <td>
                  <asp:FileUpload ID="fupld" runat="server" Width="80%" />
                  <asp:ImageButton ID="ibtnUpld" runat="server" onclick="ibtnUpld_Click" />
              <td>
              ...
          <tr>
       ...
   </ContentTemplate>
   <Triggers>
      <asp:PostBackTrigger ControlID="ibtnUpld" />
   </Triggers>
</asp:UpdatePanel>

我四处寻找答案,但这是一些非常奇怪的行为。到目前为止没有运气。

有什么想法吗?

由于

3 个答案:

答案 0 :(得分:4)

嗯,FileUpload控件只能用于回发场景,而不能用于部分页面渲染期间的异步回发场景。

http://msdn.microsoft.com/en-us/ysf0192b#using_the_FileUpload_Control_with_the_UpdatePanel_control

您可以使用AsyncFileUpload控件来代替AjaxControlToolkit。

<asp:AsyncFileUpload runat="server" ID="asyncFileUpload" Width="400px" ThrobberID="imageThrobber"
   OnClientUploadStarted="uploadStarted" OnClientUploadError="uploadError"
   ClientIDMode="AutoID" PersistFile="true" PersistedStoreType="Session" />
代码背后的代码:

     if (asyncFileUpload.HasFile)
     {
        string fullPath = GetPath(asyncFileUpload.FileName);
        asyncFileUpload.SaveAs(fullPath);
     }

我从来没有遇到任何问题。

答案 1 :(得分:0)

更改

Visible ="false"

style="display:none"

并从后面的代码中更改它 如果设置Visible =“false,则控件实际上不会呈现为HTML。”要将其呈现为HTML,请使用style =“display:none”而不是Visible =“false”

答案 2 :(得分:0)

使用回发触发器,我不得不在后面的代码中使用以下代码行:

Page.Form.Enctype = "multipart/form-data";

这很好用。

感谢链接-(http://patelshailesh.com/index.php/file-upload-control-fails-first-time-then-works-on-subsequent-submits)中的解决方案。