У меня есть usercontrol, который можно использовать, например, в шаблоне элемента gridview, это означает, что элемент управления может быть или не быть на странице при загрузке страницы. В случае, когда элемент управления находится внутри шаблона элемента, я буду отображать сетку с помощью асинхронных обратных передач (через панели обновления).
Элемент управления сам по себе блокирует скрипты регистраторов, поскольку он зависит от JavaScript. Сначала я использовал
Page.ClientScript.RegistrerClientScriptBlock
Но это не работает на асинхронных постбеках (панели обновления), поэтому я попробовал то же самое, используя ScriptManager, который позволяет мне регистрировать скрипты на странице после асинхронных постбэков. отличный!.
ScriptManager.RegisterClientScriptBlock
Однако ScriptManager (о чем я знаю) не имеет функции, позволяющей увидеть, есть ли скрипт на странице, поэтому я буду при каждой обратной передаче генерировать дубликаты блоков скрипта, это, конечно, нежелательное поведение.
Я пробежал в Google и обнаружил, что могу вызвать метод Dispose () PageRequestManager, это работает, так как он очищает сценарии и затем добавляет их снова (это также решает мою проблему с удалением неиспользуемого сценария блоки от удаленных элементов управления).
Sys.WebForms.PageRequestManager.getInstance().Dispose()
Однако, конечно, есть обратная сторона, так как я публикую здесь :).
Метод Dispose () также удаляет экземпляр на главной странице, что приводит к тому, что выполняющиеся там сценарии перестают функционировать после асинхронной обратной передачи (например, updateprogress).
Итак, есть ли способ проверить, существует ли сценарий на странице с помощью ScriptManager или каких-либо других инструментов, которые не позволят мне вставить повторяющиеся сценарии? Кроме того, есть ли способ удалить определенные блоки скриптов (например, когда я удаляю элемент в шаблоне элемента).
Большое спасибо заранее.