ASP 单页上的 .NET 多个用户控件 - 回发问题
ASP .NET Multiple Usercontrols on Single Page - Postback Issues
我正在使用 Visual Studio 2015 开发面向 .NET 4.0 的 Web 应用程序 (IIS)。
我有一个包含 4 个用户控件 (.ascx) 的 .aspx。当其中一个用户控件 post 返回主 .aspx 并且其他三个用户控件也执行 post 返回时。
我正在寻找一种方法来防止其他用户控件在其中一个用户控件执行操作时执行 post返回操作。
我试过将每个用户控件放在一个更新面板中(下面的代码)。我试过在每个用户控件中放置一个更新面板。我试过更改 ChildrenAsTriggers 和 UpdateMode 属性。我已经尝试在每个用户控件中创建一个 Click 事件,该事件在用户控件 post 中的项目返回时引发(例如下面的一个用户控件)。
无论如何,页面和所有四个用户控件都会post返回,每次其中一个返回。
主 .ASPX:
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<%@ Register TagPrefix="uc1" TagName="Components" Src="Components.ascx" %>
<%@ Register TagPrefix="uc2" TagName="Options" Src="Options.ascx" %>
<%@ Register TagPrefix="uc3" TagName="Settings" Src="Settings.ascx" %>
<%@ Register TagPrefix="uc4" TagName="Menu" Src="Menu.ascx" %>
<form id="form1" runat="server">
<cc1:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" EnablePartialRendering="true"></cc1:ToolkitScriptManager>
<asp:Panel ID="pnlComponents" runat="server">
<asp:UpdatePanel ID="updpnlComponents" runat="server">
<ContentTemplate>
<uc1:Components id="Components" runat="server"></uc1:Components>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Panel>
<asp:Panel ID="pnlOptions" runat="server">
<asp:UpdatePanel ID="updpnlOptions" runat="server">
<ContentTemplate>
<uc2:Options id="Options" runat="server" CssClass="jQTrackChanges"></uc2:Options>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Panel>
<asp:Panel ID="pnlSettings" runat="server">
<asp:UpdatePanel ID="updpnlSettings" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Settings" EventName="Click" />
</Triggers>
<ContentTemplate>
<uc3:Settings id="Settings" runat="server" CssClass="jQTrackChanges"></uc3:Settings>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Panel>
<asp:Panel ID="pnlMenu" runat="server">
<asp:UpdatePanel ID="updpnlMenu" runat="server">
<ContentTemplate>
<uc4:Menu id="Menu" runat="server" CssClass="jQTrackChanges"></uc4:Menu>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Panel>
</form>
Settings.ascx.vb:
Private Sub chkIn_CheckedChanged(sender As Object, e As EventArgs) Handles chkIn.CheckedChanged
RaiseEvent Click(Me, e)
End Sub
Private Sub chkOut_CheckedChanged(sender As Object, e As EventArgs) Handles chkOut.CheckedChanged
RaiseEvent Click(Me, e)
End Sub
Public Event Click As EventHandler
编辑 - 添加 AutoPostBack=false 和 UpdateMode=Conditional 无效。所有四个用户控件仍然 post 回到原来的状态。
已更新主 .ASPX:
<asp:Panel ID="pnlOptions" runat="server" AutoPostBack="false">
<asp:UpdatePanel ID="updpnlOptions" runat="server" UpdateMode="Conditional" AutoPostBack="false">
<ContentTemplate>
<uc2:Options id="Options" runat="server" AutoPostBack="false" CssClass="jQTrackChanges"></uc2:Options>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Panel>
<asp:Panel ID="pnlSettings" runat="server" AutoPostBack="false">
<asp:UpdatePanel ID="updpnlSettings" runat="server" UpdateMode="Conditional" AutoPostBack="false">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Settings" EventName="Click" />
</Triggers>
<ContentTemplate>
<uc3:Settings id="Settings" runat="server" AutoPostBack="false" CssClass="jQTrackChanges"></uc3:Settings>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Panel>
<asp:Panel ID="pnlMenu" runat="server" AutoPostBack="false">
<asp:UpdatePanel ID="updpnlMenu" runat="server" UpdateMode="Conditional" AutoPostBack="false">
<ContentTemplate>
<uc4:Menu id="Menu" runat="server" AutoPostBack="false" CssClass="jQTrackChanges"></uc4:Menu>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Panel>
请使用属性 window.change 中的自动回发 属性 这是默认行为 true 或 false,然后重试。
我们最终放弃并使用 Javascript 替换尽可能多的回发 activity 以尽量减少发生的回发数量。
我正在使用 Visual Studio 2015 开发面向 .NET 4.0 的 Web 应用程序 (IIS)。
我有一个包含 4 个用户控件 (.ascx) 的 .aspx。当其中一个用户控件 post 返回主 .aspx 并且其他三个用户控件也执行 post 返回时。
我正在寻找一种方法来防止其他用户控件在其中一个用户控件执行操作时执行 post返回操作。
我试过将每个用户控件放在一个更新面板中(下面的代码)。我试过在每个用户控件中放置一个更新面板。我试过更改 ChildrenAsTriggers 和 UpdateMode 属性。我已经尝试在每个用户控件中创建一个 Click 事件,该事件在用户控件 post 中的项目返回时引发(例如下面的一个用户控件)。
无论如何,页面和所有四个用户控件都会post返回,每次其中一个返回。
主 .ASPX:
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<%@ Register TagPrefix="uc1" TagName="Components" Src="Components.ascx" %>
<%@ Register TagPrefix="uc2" TagName="Options" Src="Options.ascx" %>
<%@ Register TagPrefix="uc3" TagName="Settings" Src="Settings.ascx" %>
<%@ Register TagPrefix="uc4" TagName="Menu" Src="Menu.ascx" %>
<form id="form1" runat="server">
<cc1:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" EnablePartialRendering="true"></cc1:ToolkitScriptManager>
<asp:Panel ID="pnlComponents" runat="server">
<asp:UpdatePanel ID="updpnlComponents" runat="server">
<ContentTemplate>
<uc1:Components id="Components" runat="server"></uc1:Components>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Panel>
<asp:Panel ID="pnlOptions" runat="server">
<asp:UpdatePanel ID="updpnlOptions" runat="server">
<ContentTemplate>
<uc2:Options id="Options" runat="server" CssClass="jQTrackChanges"></uc2:Options>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Panel>
<asp:Panel ID="pnlSettings" runat="server">
<asp:UpdatePanel ID="updpnlSettings" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Settings" EventName="Click" />
</Triggers>
<ContentTemplate>
<uc3:Settings id="Settings" runat="server" CssClass="jQTrackChanges"></uc3:Settings>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Panel>
<asp:Panel ID="pnlMenu" runat="server">
<asp:UpdatePanel ID="updpnlMenu" runat="server">
<ContentTemplate>
<uc4:Menu id="Menu" runat="server" CssClass="jQTrackChanges"></uc4:Menu>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Panel>
</form>
Settings.ascx.vb:
Private Sub chkIn_CheckedChanged(sender As Object, e As EventArgs) Handles chkIn.CheckedChanged
RaiseEvent Click(Me, e)
End Sub
Private Sub chkOut_CheckedChanged(sender As Object, e As EventArgs) Handles chkOut.CheckedChanged
RaiseEvent Click(Me, e)
End Sub
Public Event Click As EventHandler
编辑 - 添加 AutoPostBack=false 和 UpdateMode=Conditional 无效。所有四个用户控件仍然 post 回到原来的状态。
已更新主 .ASPX:
<asp:Panel ID="pnlOptions" runat="server" AutoPostBack="false">
<asp:UpdatePanel ID="updpnlOptions" runat="server" UpdateMode="Conditional" AutoPostBack="false">
<ContentTemplate>
<uc2:Options id="Options" runat="server" AutoPostBack="false" CssClass="jQTrackChanges"></uc2:Options>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Panel>
<asp:Panel ID="pnlSettings" runat="server" AutoPostBack="false">
<asp:UpdatePanel ID="updpnlSettings" runat="server" UpdateMode="Conditional" AutoPostBack="false">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Settings" EventName="Click" />
</Triggers>
<ContentTemplate>
<uc3:Settings id="Settings" runat="server" AutoPostBack="false" CssClass="jQTrackChanges"></uc3:Settings>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Panel>
<asp:Panel ID="pnlMenu" runat="server" AutoPostBack="false">
<asp:UpdatePanel ID="updpnlMenu" runat="server" UpdateMode="Conditional" AutoPostBack="false">
<ContentTemplate>
<uc4:Menu id="Menu" runat="server" AutoPostBack="false" CssClass="jQTrackChanges"></uc4:Menu>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Panel>
请使用属性 window.change 中的自动回发 属性 这是默认行为 true 或 false,然后重试。
我们最终放弃并使用 Javascript 替换尽可能多的回发 activity 以尽量减少发生的回发数量。