ASP .NET单页上的多个用户控件 - 回发问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ASP .NET单页上的多个用户控件 - 回发问题相关的知识,希望对你有一定的参考价值。

我正在使用Visual Studio 2015开发面向.NET 4.0的Web应用程序(IIS)。

我有一个包含4个usercontrols(.ascx)的.aspx。当其中一个用户控件回发主.aspx时,其他三个用户控件也进行回发。

我正在寻找一种方法来阻止其他用户控件在其中一个用户控件执行回发时。

我已经尝试将每个用户控件放在updatepanel中(下面的代码)。我已经尝试在每个usercontrol中放置一个updatepanel。我已经尝试更改ChildrenAsTriggers和UpdateMode属性。我已经尝试在每个usercontrol中创建一个Click事件,当usercontrol中的项目发回时(例如下面的一个用户控件的例子)。

无论如何,页面和所有四个用户控件都会在每次执行回发时都进行回发。

主要.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 =条件无效。所有四个用户控件仍然会回发。

更新主要.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>
答案

请使用属性窗口中的autopostback属性。将其默认行为改为true或false,然后重试。

另一答案

我们最终放弃并使用javascript来尽可能多地替换回发活动,以最大限度地减少发生的回发数量。

以上是关于ASP .NET单页上的多个用户控件 - 回发问题的主要内容,如果未能解决你的问题,请参考以下文章

更新面板中 Asp 中继器的页面回发问题

单页上多个表单的优雅解决方案

从后面的子母版页代码访问子母版页上的用户控件

无法从Javascript访问Master页面上的用户控件中的标签

ASP.NET 用户控件性能增强

text 单页上的作者生物和图像