#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 / обработкой событий.