как получить JavaScript для выполнения в панели обновления - PullRequest
3 голосов
/ 10 ноября 2009

У меня есть панель обновления, которая содержит таблицу, в которую я добавляю ряд элементов управления нажатием кнопки. Один из добавленных элементов управления - это пользовательский элемент управления, а также средство выбора даты. Внутри этого пользовательского элемента управления у меня есть текстовое поле, и у меня есть JQuery, который применяет к нему плагин JQuery UI DatePicker, превращая его в средство выбора даты. Это не проблема, если этот пользовательский элемент управления загружается на страницу динамически, однако, если он выполняется на асинхронных обратных передачах внутри панели обновления, javascript не запускается, и поэтому текстовое поле визуализируется, но без всех функций jquery datepicker. Вот некоторый код, который находится внутри DatePicker.ascx:

$(function() {
       //reset the localization
        $.datepicker.setDefaults($.extend($.datepicker.regional['']));
        $("#<%=txtDate.ClientID%>").datepicker({ dateFormat: 'mm/dd/yy', showOn: 'button', buttonImage: '/images/calendar.gif', buttonImageOnly: true, altField: '#<%=txtDate.ClientID%>' });

}

Таким образом, этот jquery не запускается, когда элемент управления загружается динамически при асинхронной обратной передаче. Так как я могу сделать эту работу?

Ответы [ 3 ]

1 голос
/ 10 ноября 2009

Когда вы визуализируете скрипт в ответе, он делает именно это: визуализирует скрипт. Именно во время рендеринга страницы сценарий сначала отображается, и это уже произошло к моменту выполнения этого кода.

Microsoft предложила для этого решение, которое заключается в регистрации блока скрипта с помощью ScriptManager.RegisterClientScriptBlock, и ScriptManager проследит, чтобы скрипт выполнялся после загрузки страницы.

В зависимости от вашей ситуации, это может или не может быть полезным. Или, в промежуточном: это может быть полезно только с небольшим количеством обходных путей. Из вашего комментария я могу вспомнить один обходной путь, который я мог бы рассмотреть, используя:

Добавьте метод GetClientScript в свой UserControl, где возвращается JavaScript. Если UserControl загружается при обычной загрузке страницы, этот метод вызывается в точке, где вы в данный момент визуализируете свой скрипт. Если элемент управления загружен в постбэк UpdatePanel, вы получаете скрипт-элемент из элемента управления, используя этот метод, и регистрируете его в ScriptManager под рукой. В этом случае вам также следует передать параметр обратно в UserControl , а не , чтобы еще раз зарегистрировать скрипт, как обычно.

0 голосов
/ 10 ноября 2009

DatePicker.ascx вставляет этот javascript вверху страницы во время начальной загрузки? И тогда эта функция завершается ошибкой, поскольку средство выбора даты еще не загружено. И тогда вы загружаете DatePicker при асинхронности в панель обновления, но функция не вызывается.

...