ASP .NET нескольких пользовательских элементов управления на одной странице - проблемы обратной передачи - PullRequest
0 голосов
/ 12 апреля 2019

Я работаю над веб-приложением (IIS), ориентированным на .NET 4.0 с использованием Visual Studio 2015.

У меня есть .aspx, который содержит 4 пользовательских элемента управления (.ascx). Когда один из пользовательских элементов управления отправляет обратно основной файл .aspx, а остальные три пользовательских элемента управления также выполняют обратную передачу.

Я ищу способ запретить другим пользовательским элементам управления выполнять обратную передачу, когда один из них делает.

Я пытался поместить каждый из пользовательских элементов управления в панель обновления (код ниже). Я пытался поместить панель обновления в каждом пользовательском контроле. Я пытался изменить свойства ChildrenAsTriggers и UpdateMode. Я попытался создать событие Click в каждом пользовательском контроле, которое возникает, когда элементы в пользовательском контроле отправляют назад (пример только для одного из пользовательских контроллеров ниже).

Независимо от того, что страница и все четыре пользовательских элемента управления выполняют обратную передачу каждый раз, когда один из них делает.

Main .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 не имеет никакого эффекта. Все четыре пользовательских элемента управления все еще отправляют обратно, когда один из них.

Обновлен основной .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>

Ответы [ 2 ]

0 голосов
/ 26 апреля 2019

В итоге мы отказались и использовали Javascript, чтобы заменить как можно больше операций обратной передачи, чтобы минимизировать количество возникающих обратных передач.

0 голосов
/ 12 апреля 2019

Пожалуйста, используйте свойство autopostback из свойств окна. Измените его поведение по умолчанию на true или false и попробуйте снова.

...