Как я объявляю Управление Интернет-пользователя C#, но мешаю ему инициализировать?

У меня есть страница C#/ASP.NET .aspx, которая объявляет два средств управления, что каждый представляет содержание одной вкладки. Я хочу аргумент строки запроса (например? tab=1) для определения, какие из двух средств управления активируются. Моя проблема, они оба проходят события инициализации и заполняют их дочерние элементы управления, тратя впустую ресурсы ЦП и замедляя время отклика. Действительно ли возможно деактивировать их так или иначе, таким образом, они не проходят инициализации?

Моя .aspx страница похожа на это:

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

И та часть хорошо работает. Я принял, что <% будет означать, что управление не было бы на самом деле объявлено и так не инициализирует, но это не так...

5
задан Scott Stafford 2 April 2010 в 14:30
поделиться

3 ответа

Если встроенный / спагетти-серверный код не помогает, я могу придумать только одно альтернативное решение: не объявлять элементы управления в разметке . Вместо этого загрузите нужный элемент управления на страницу из обработчика событий Page_Init . Для этого можно использовать метод Page.LoadControl () :

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);
}
7
ответ дан 14 December 2019 в 04:34
поделиться

Примените свою логику в codebehind.

Объявите элемент управления:

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

А затем установите Visibility:

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

ctrl2.Visible = true;
}
0
ответ дан 14 December 2019 в 04:34
поделиться

переместите код инициализации из .Load в свой собственный общедоступный метод и вызовите инициатор явно, когда это необходимо.

1
ответ дан 14 December 2019 в 04:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: