Я знаю, что это кажется непрактичным, но я действительно предпочитаю делать это таким образом из-за того, как я реконструирую эту страницу WebForms, чтобы удовлетворить срочные бизнес-требования в последнюю минуту.
У меня есть пользовательский элемент управления. В этом usercontrol есть блок Javascript, который содержит функции, связанные с событиями onclick
и onchange
различных элементов управления. Раньше свойство .Visible
элемента управления было True
, поэтому его HTML и Javascript отображались на странице.
Теперь мне нужно установить для свойства .Visible
моего элемента управления значение false
и обернуть вокруг него UpdatePanel. Это предотвращает отрисовку HTML-кода элемента управления во время начальной загрузки страницы. Чтобы отобразить содержимое элемента управления, пользователь должен нажать кнопку, которая вызывает метод на стороне сервера, который устанавливает для свойства .Visible
элемента управления значение true
. Поскольку теперь он находится в UpdatePanel, элемент управления отображается на странице в некотором роде Ajaxy. Однако оказывается, что Javascript, расположенный в элементе управления, недоступен, поэтому ни одно из событий onclick
и onchange
дочерних элементов управления не работает, поскольку связанные с ними функции Javascript имеют значение undefined
.
Решения, которые я предпочитаю не использовать по причинам, слишком сложным для краткости:
- JSON/AJAX (слишком много новой архитектуры за такое короткое время)
- CSS display:none/visibility:visible (мне нужно сохранить как можно больше серверной функциональности, чтобы свести к минимуму повторную архитектуру)
- Поместите Javascript на родительскую страницу или в файл .js (я буду рассматривать это как крайнюю меру, но я ссылаюсь на серверные элементы управления, используя
<#%=ControlId.ClientID %>
. Вы не можете сделать это, если Javascript не содержится в UserControl, и я не хочу чтобы установить элементы управления сClientIdMode
наstatic
.)
Мне бы очень хотелось найти способ сохранить Javascript в моем UserControl таким образом, чтобы он был доступен клиенту, когда UpdatePanel устанавливает для свойства .Visible
элемента управления значение true
с помощью UpdatePanel.