Scott Stafford
Scott Stafford

Reputation: 44798

How do I declare a C# Web User Control but stop it from initializing?

I have a C#/ASP.NET .aspx page that declares two controls that each represents the content of one tab. I want a query string argument (e.g., ?tab=1) to determine which of the two controls is activated. My problem is, they both go through the initialization events and populate their child controls, wasting CPU resources and slowing the response time. Is it possible to deactivate them somehow so they don't go through any initialization?

My .aspx page looks like this:

<% if (TabId == 0)
   { %>
<my:usercontroltabone id="ctrl1" runat="server" />
<% }
   else if (TabId == 1)
   { %>
<my:usercontroltabtwo id="ctrl2" runat="server" />
<% } %>

And that part works fine. I assumed the that <%'s would have meant the control wouldn't actually be declared and so wouldn't initialize, but that isn't so...

Upvotes: 5

Views: 3594

Answers (4)

Ashok Mandial
Ashok Mandial

Reputation: 585

UserControl.dispose() method stop usercontrol page_load event to fire.

Upvotes: 0

J&#248;rn Schou-Rode
J&#248;rn Schou-Rode

Reputation: 38346

If inline/spaghetti server side code does not help, I can only think of one alternative solution: avoid declaring the controls in the markup. Instead, load the control you actually want on the page from your Page_Init event handler. The Page.LoadControl() method can be used for this:

void Page_Init(object sender, System.EventArgs e)
{
    Control tab;

    switch (TabId)
    {
        case 0: tab = LoadControl("usercontroltabone.ascx"); break;
        case 1: tab = LoadControl("usercontroltabtwo.ascx"); break;
        default: tab = LoadControl("defaulttab.ascx"); break;
    }

    somePlaceholder.Controls.Add(tab);
}

Upvotes: 7

Chuck Conway
Chuck Conway

Reputation: 16435

Apply your logic in the codebehind.

Declare the control:

<my:usercontroltabtwo id="ctrl2" Visible="False" runat="server" />

And then set the Visibility:

if(TabId == 0)
{
ctrl1.Visible = true;
}
else if(TabId == 1)
{

ctrl2.Visible = true;
}

Upvotes: 0

Mike Jacobs
Mike Jacobs

Reputation: 509

move the initialization code out of the .Load and into your own custom public method, and call the initiator explicitly when appropriate.

Upvotes: 1

Related Questions