Как объявить пользовательский элемент управления C #, но остановить его инициализацию? - PullRequest
5 голосов
/ 02 апреля 2010

У меня есть страница Cas / 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" />
<% } %>

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

Ответы [ 4 ]

7 голосов
/ 02 апреля 2010

Если встроенный / спагетти-код на стороне сервера не помогает, я могу думать только об одном альтернативном решении: избегать объявления элементов управления в разметке . Вместо этого загрузите нужный элемент управления на страницу из обработчика событий 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);
}
1 голос
/ 02 апреля 2010

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

0 голосов
/ 01 октября 2013

Метод UserControl.dispose () останавливает событие usercontrol page_load для запуска.

0 голосов
/ 02 апреля 2010

Примените свою логику в коде позади.

Объявить контроль:

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

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

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

ctrl2.Visible = true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...