我们如何避免母版页回发整个页面?
3 回答
只是为了澄清 - 更新面板不会阻止整个页面回发或整个页面生命周期。它只是导致该过程在用户“看不见”的后台完成。唯一的区别是,在回发完成后,只有更新面板声明包裹的部分被刷新,从而造成只有部分页面被回发的错觉。
如果触发器控件位于更新面板内,则应将 ChildrenAsTriggers 属性设置为 True。如果触发更新的控件在更新面板之外,那么您应该将 Triggers 部分添加到控制面板并添加异步触发器。如果是组合,那么你可以将两者结合起来以获得最佳效果。
如果触发更新的控件包含在更新面板中:
<asp:UpdatePanel id="MyUpdatePanel" runat="server" ChildrenAsTriggers="True">
<ContentTemplate>
...Stuff you want updated
</ContentTemplate>
</asp:UpdatePanel>
或者,如果控件不包含在更新面板中:
<asp:UpdatePanel id="MyUpdatePanel" runat="server">
<ContentTemplate>
...Stuff you want updated
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="MyButtonControl" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
使用母版页对整个页面是否回发实际上没有任何影响。一个没有母版和标准的简单 ASPX 页面也可以进行整个页面的回发。
不过从字里行间看,我猜您的母版页上已经有一些 UpdatePanel(可能围绕内容占位符),当其中的某些内容导致回发时,它们会阻止整个页面刷新。
无论哪种方式,防止整个页面刷新(无论是否使用母版页)的关键是确保导致回发的控件位于 UpdatePanel 中,或者使用一些 JavaScript 回调服务器并异步处理响应。
母版页不负责 PostBack,这就是 HTML 表单的用途。
阻止页面回发的唯一方法是将整个内容包装在 UpdatePanel 中。但这本身就是个坏主意!!