ASP.Net 文件上传导致使用触发器在更新面板中回发

Posted

技术标签:

【中文标题】ASP.Net 文件上传导致使用触发器在更新面板中回发【英文标题】:ASP.Net file upload causing post back in update panel using triggers 【发布时间】:2013-08-10 03:20:45 【问题描述】:

我有文件上传控制,可以使用更新面板上传个人资料图片。我已将 AsyncPostBackTrigger 与更新面板一起使用,但该页面仍然导致完全回发。

下面是我的内联代码。

<asp:UpdatePanel ID="pnlZerkerBasicProfile" runat="server">
<input type="file" id="myFile" name="myFile" class="file_input_hidden" onchange="javascript:FileUploadSubmit();" style="cursor: pointer;" />
<Triggers>
        <asp:AsyncPostBackTrigger ControlID="btnSaveProfilePicture" />
</Triggers>

谁能帮忙?

【问题讨论】:

【参考方案1】:

将触发器更改为回发触发器,因为当通过更新面板发生异步回发时,Request.Form.AllKeys 中不提供文件上传。看到这个:

http://www.codeproject.com/Articles/16945/Simple-AJAX-File-Upload

【讨论】:

感谢您的回答,但我不想发回该页面。有什么选择吗?【参考方案2】:

这应该可以工作

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" />
    <div>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="conditional">
            <Triggers>
                <asp:PostBackTrigger ControlID="Button1" />
            </Triggers>
            <ContentTemplate>
                 <asp:FileUpload ID="FileUpload1" runat="server" />
                 <asp:Button ID="Button1" runat="server"Text="Upload" OnClick="Button1_Click" />
            </ContentTemplate>
        </asp:UpdatePanel>
    </div>

【讨论】:

【参考方案3】:

这段代码应该可以工作。它不会导致回发。

<asp:UpdatePanel ID="pnlZerkerBasicProfile" runat="server">
   <ContentTemplate>
      <input type="file" id="myFile" name="myFile" class="file_input_hidden" 
             onchange="javascript:FileUploadSubmit();" style="cursor: pointer;" />
      <asp:Button ID="btnSaveProfilePicture" runat="server"Text="Upload" 
           OnClick="btnSaveProfilePicture_Click" />
   </ContentTemplate>
   <Triggers>
       <asp:PostBackTrigger ControlID="btnSaveProfilePicture"  />
   </Triggers> 
</asp:UpdatePanel>

【讨论】:

以上是关于ASP.Net 文件上传导致使用触发器在更新面板中回发的主要内容,如果未能解决你的问题,请参考以下文章

从放置在更新面板外部的控件触发 asp.net 事件

当asp.net的更新面板触发时,css类更改为初始状态

更新面板 AJAX asp.net 后运行脚本

当其他更新面板执行时通过触发器刷新更新面板,因为第一个必须具有 UpdateMode=Conditional

异步更新 ASP.NET 面板

ASP.NET 在更新面板更新时显示“正在加载...”消息