Search code examples
asp.netvb.netuser-controlsupdatepanelpostback

ASP .NET Multiple Usercontrols on Single Page - Postback Issues


I am working on a web application (IIS) targeting .NET 4.0 using Visual Studio 2015.

I have an .aspx that contains 4 usercontrols (.ascx). When one of the usercontrols posts back the main .aspx AND the other three usercontrols also do a postback.

I'm looking for a way to prevent the other usercontrols from doing a postback when one of them does.

I've tried putting each of the usercontrols within an updatepanel (code below). I've tried putting an updatepanel within each usercontrol. I've tried changing the ChildrenAsTriggers and UpdateMode properties. I've tried creating a Click event in each usercontrol that's raised when the items within the usercontrol post back (example on just one of the usercontrols below).

No matter what, the page and all four usercontrols all do a postback every time one of them does.

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

Edit - adding AutoPostBack=false and UpdateMode=Conditional has no effect. All four usercontrols still post back when one does.

Updated main .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>

Solution

  • We eventually gave up and used Javascript to replace as much of the postback activity as possible to minimize the number of postbacks that happen.