ASP.NET UpdatePanel PostBackTrigger触发完整的PostBack

3
以下是标记语言页面
  <asp:UpdatePanel runat="server" UpdateMode="Conditional">
        <ContentTemplate>
                    <table>
                        <tr>
                            <td>
                                <label>File name<label>
                            </td>
                        </tr>
                       <tr>
                            <td>
  <asp:TextBox runat="server" ID="txtName" Width="150%"></asp:TextBox>
                            </td>
                        </tr>
                      <tr>
                            <td>
                                <label>File</label>
                            </td>
                            <td>
                                <asp:FileUpload runat="server" ID="fileUpload" />
                            </td>
                        </tr>
                    </table>
                    <asp:Button runat="server" ID="btnUpload" Text="Upload file"  OnClick="btnUpload_Click" />
                </div>

                <div class="panel-heading">File display</div>
                <div class="panel-body">
     <asp:GridView runat="server">
       </asp:GridView>
                    <asp:Button runat="server" ID="btnRefresh" Text="Refresh" OnClick="btnRefresh_Click" />
                </div>
            </div>
        </ContentTemplate>
        <Triggers>
            <asp:PostBackTrigger ControlID="btnUpload" />
        </Triggers>
    </asp:UpdatePanel>

使用以上代码时,每当用户点击“btnUpload”按钮时,都会进行一次回发(post back),但是有一个更新面板(update panel)可以防止回发。当我将PostBackTrigger更改为AsyncPostBackTrigger时,页面没有回发,但fileUpload.HasFile属性将为false,无法获取文件。
以上代码有什么问题?为什么PostBackTrigger触发了回发?
2个回答

8

上传文件无法使用AsyncPostBackTrigger,只能使用PostBackTrigger实现。
解决方法: 如果您想使用AsyncPostBackTrigger上传文件,则必须使用ajaxtoolkit。在AjaxToolkit中有一个名为“AsyncFileUpload”的控件名称。
希望您知道如何将AjaxToolkit添加到工具箱中。如果您不知道,请告诉我,我会给您指导。


2
您尚未定义控件的事件,您需要说明在哪个控件事件上触发:
<asp:AsyncPostBackTrigger ControlID="btnUpload" EventName="Click" />

更新:

你需要使用异步postback触发器:

AsyncPostBackTrigger - 使用这些触发器来指定UpdatePanel内部或外部的控件,当点击时应触发部分页面postback。

PostBackTrigger - 使用这些触发器使UpdatePanel内的控件引起完整页面postback而不是部分页面postback。


尝试将EventName添加到PostBackTrigger时出现错误:类型“System.Web.UI.PostBackTrigger”没有名为“EventName”的公共属性。而且,如果我没记错的话,只有AsyncPostBack才有EventName属性... - User2012384
如果您不想进行完整的PostBack,是的,您需要使用AsyncPostBackTrigger。 - Ehsan Sajjad
但是如果我使用AsyncPostBackTrigger,我将无法获取文件,有没有办法可以检索文件? - User2012384
文件上传需要进行完整的PostBack,这是我的经验。 - Ehsan Sajjad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接