Сценарий запуска, зарегистрированный в ScriptManager.RegisterStartupScript, не отображается на странице - PullRequest
1 голос
/ 28 января 2011

У меня есть вызов ScriptManager.RegisterStartupScript в ASP.NET 3.5, который не отображается на странице, и я не могу понять, почему:

System.Web.UI.ScriptManager.RegisterStartupScript( Page
                                                 , typeof(ListControlBase)
                                                 , "ShowPopup_" + ClientID
                                                 , "alert(\"HI\");"
                                                 , true );

Вышеуказанный вызов находится внутри обработчика кнопки в базовом классе (ListControlBase), который подклассируется пользовательским элементом управления с помощью UpdatePanel (элемент управления List Manager). Этот пользовательский элемент управления существует для управления списком от 1 до n копий другого пользовательского элемента управления (элемента управления списком), которые динамически добавляются, обновляются или удаляются в PlaceHolder в UpdatePanel. Для тестирования я попытался добавить как 1, так и 2 копии элемента управления List List.

Элемент управления List Manager создается с использованием LoadControl (перегрузка, которая принимает путь ascx) и добавляется в PlaceHolder в элементе управления, представляющем полную форму, которую я создаю. До этого момента все элементы управления существуют в проекте веб-приложения. Затем полный элемент управления формы добавляется в PlaceHolder в объекте страницы, который существует в проекте родительского веб-сайта, снова используя LoadControl (та же перегрузка, что и выше) для создания экземпляра.

Если я достану UpdatePanel, вызов RegisterStartupScript приведет к тому, что сценарий запуска будет отображаться, как и ожидалось.

Оставив UpdatePanel, я использовал отладчик, чтобы убедиться, что скрипт действительно зарегистрирован в ScriptManager, как сразу после вызова RegisterStartupScript в проекте веб-приложения, так и в методе OnPreRender страницы в основном проекте:

Введено в QuickWatch: ((System.Web.UI.ScriptManager)(Page.ScriptManager))._scriptRegistration._startupScriptBlocks

Как я уже сказал, я могу видеть зарегистрированный сценарий запуска в QuickWatch при отладке как из проекта веб-приложения, так и из проекта веб-сайта, однако он не отображается на странице, которую я проверил с помощью Firebug.

Я искал в Интернете, в том числе StackOverflow несколько раз, но безуспешно. У кого-нибудь есть какие-либо идеи? Есть ли какое-либо свойство ScriptManager, которое я могу проверить в окне просмотра, которое может дать мне подсказку по этому вопросу?

Спасибо за любые идеи ...

Ответы [ 2 ]

2 голосов
/ 01 февраля 2011

Как предполагает Уилл, это, вероятно, проблема разработки IIS.После перезапуска машины она ушла.

2 голосов
/ 28 января 2011

Посмотрите на перегруженную версию RegisterStartupScript, которая принимает элемент управления: MSDN: метод ScriptManager.RegisterStartupScript (Control, Type, String, String, Boolean)

Регистрирует скрипт запусказаблокировать элемент управления, находящийся внутри UpdatePanel, с помощью элемента управления ScriptManager и добавить блок сценария на страницу.

...