Как добавить или нет элемент управления на странице aspx?

#asp.net #user-controls

#asp.net #пользовательские элементы управления

Вопрос:

У меня есть страница с веб-пользовательским элементом управления, этот элемент управления довольно тяжелый, и он используется, только если у пользователя приложения есть некоторые права. Таким образом, для него установлено значение visible = false на случай, если пользователь не сможет его использовать.. Но в этом случае элемент управления добавляется на страницу, даже если он не виден.

Проблема в том, что веб-пользовательский элемент управления используется действительно редко. Поэтому я бы хотел не включать код, если в этом нет необходимости. Я чувствую, что должен использовать состояние preinit для добавления элемента управления веб-пользователем, когда это необходимо, но я не знаю как .. Есть хорошая идея? Спасибо за помощь..

Комментарии:

1. у вас не может быть просто if .. оператор else и не добавлять элемент управления, если у пользователя нет прав на его использование?

Ответ №1:

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

 if (something)
{
  Control cnt = Page.LoadControl("UserControl.ascx");
  placeHolder1.Controls.Add(cnt);
}
  

Комментарии:

1. OnInit. Вы не можете сделать это в pageload, потому что элемент управления восстанавливается в OnInit из ViewState при обратной передаче. Если вы сделаете это при загрузке, вы потеряете все значения через обратную передачу

2. Хорошо, это работает, asp.net похоже на какое-то волшебство .. Tx для всех ответов

Ответ №2:

Что вы имеете в виду под довольно тяжелым? Если это отнимает много времени из-за привязки к данным, вы должны предоставить public function (например BindData ), который вызывается автоматически не из page_load, а со страницы, когда она запрашивается и пользователю разрешено ее просматривать.

Комментарии:

1. Вы могли бы выполнять все трудоемкие действия в этой функции, поэтому только разметка элемента управления должна быть зарегистрирована с помощью asp.net и viewstate элемента управления будет сохранен. Если это слишком много, попробуйте ответ Антонио Бакулы, в противном случае мое решение проще и не имеет негативных побочных эффектов воссоздания / чтения элемента управления и позволяет избежать проблем с ViewState / обработкой событий.