首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP .NET多个用户控件的单页回发问题

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

Stack Overflow用户
提问于 2019-04-13 02:26:42
回答 2查看 161关注 0票数 0

我正在使用Visual Studio2015开发一个针对.NET 4.0的web应用程序(IIS)。

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

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

我尝试将每个用户控件放在一个updatepanel中(代码如下)。我尝试在每个用户控件中放置一个updatepanel。我尝试过更改ChildrenAsTriggers和UpdateMode属性。我尝试在每个用户控件中创建一个Click事件,当用户控件中的项回发时会引发该事件(仅在下面的一个用户控件上示例)。

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

主.ASPX:

代码语言:javascript
复制
<%@ 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:

代码语言:javascript
复制
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不起作用。所有四个用户控件仍然会在一个用户控件回发时进行回发。

更新的主.ASPX:

代码语言:javascript
复制
    <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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-26 22:51:47

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

票数 0
EN

Stack Overflow用户

发布于 2019-04-13 02:39:03

请使用属性window.change中的autopostback属性,它的默认行为为真或假,然后重试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55657586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档