Сценарий запуска, зарегистрированный в ScriptManager.RegisterStartupScript, не отображается на странице

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

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

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

Элемент управления 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, которое я могу проверить в окне просмотра, которое может дать мне подсказку по этому поводу?

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


person Mark M    schedule 27.01.2011    source источник
comment
stackoverflow .com / questions / 802506 /.   -  person asawyer    schedule 28.01.2011
comment
Это была охота на бекасов. Вышел из системы и снова в ОС, и проблема исчезла. Что-то, должно быть, застряло в памяти.   -  person Mark M    schedule 28.01.2011
comment
ответьте на свой вопрос, и через пару дней вы сможете выбрать его как правильный. Это звучит странно, но здесь мы делаем это именно так, потому что это не отменяет работу, которую Тим вложил в попытки помочь. Кроме того, то, что вы сказали, наводит меня на мысль, что проблема была в сервере IIS разработки, что подтверждается тем фактом, что вы отлаживаете в firefox. Что может случиться, так это то, что вы создадите запуск, протестируете и затем выключите firefox ... но сервер IIS все равно будет работать. Просто войдите в панель задач и вручную выключите сервер IIS, если это произойдет снова. Это проблема FF.   -  person    schedule 28.01.2011
comment
@Will - подойдет. Спасибо за информацию о СОП. Кстати, как на это влияет отладка в Firefox?   -  person Mark M    schedule 01.02.2011
comment
VS, я думаю, не может понять, что FF закрылся и поэтому не знает, что нужно выключить сервер разработки. Или что-то.   -  person    schedule 01.02.2011


Ответы (2)


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

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

person Tim Schmelter    schedule 27.01.2011
comment
Я пробовал это безуспешно. Спасибо. - person Mark M; 28.01.2011

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

person Mark M    schedule 01.02.2011