ASP.Net UpdatePanel ImageButton вызывает сообщение «this._postbackSettings.async имеет значение null или не является объектом»
-
09-06-2019 - |
Вопрос
Я получаю эту ошибку на панели обновления в popupControlExtender, который находится внутри dragPanelExtender.
Я вижу, что у многих других людей есть эта проблема и есть различные исправления, ни одно из которых не помогло мне.
Мне бы хотелось услышать логическое объяснение того, почему это происходит, и надежный способ избежать подобных проблем в будущем.
Я обнаружил, что, как и другие, эта ошибка не возникает, когда триггером является LinkButton, а не ImageButton, и мне все еще интересно, есть ли у кого-нибудь объяснение.
Решение
Я предполагаю, что UpdatePanel не может правильно записать пользовательское свойство «async» в запрос обратной передачи.Вероятно, это связано с блокировкой одного из элементов управления, обертывающих его (мне кажется, что это popupControlExtender - он имеет тенденцию вести себя странно с панелями обновлений, поскольку предназначен для управления событиями внутри него в целях отображения/скрытия).
Я бы порекомендовал либо удалить панель обновлений и развернуть собственное решение для конкретных потребностей вашего бизнеса, либо реализовать собственный сценарий всплывающего окна (вероятно, его немного проще написать).
Кстати, в некотором смысле «this._postbackSettings.async» — это ваша платформа AJAX.NET, пытающаяся выяснить, является ли это асинхронным вызовом или нет.Возможно, вы сможете преодолеть это, установив это программно перед отправкой обратной передачи (перехватите событие обратной передачи и добавьте поле в запрос обратной передачи, если его еще нет).
Просто некоторые мысли... Я не верю, что на этот вопрос можно найти готовый ответ!
Другие советы
У меня была та же проблема, и я не нашел удовлетворительного решения, пока не оказался на http://siderite.blogspot.com/2009/02/thispostbacksettingsasync-is-null-or.html который делает именно то, что я хочу.
Чтобы избежать проблем с возможными нерабочими ссылками в будущем, вот код:
var script = @"
if (Sys &&
Sys.WebForms && Sys.WebForms.PageRequestManager &&
Sys.WebForms.PageRequestManager.getInstance)
{
var prm = Sys.WebForms.PageRequestManager.getInstance();
if (prm &&
!prm._postBackSettings)
{
prm._postBackSettings = prm._createPostBackSettings(false, null, null);
}";
ScriptManager.RegisterOnSubmitStatement(
Page,
Page.GetType(),
"FixPopupFormSubmit",
script);
В случае отправки без установленного _postBackSettings он создает их, в результате чего исключение нулевой ссылки исчезает, поскольку _postBackSettings.async становится доступным.
Надеюсь это поможет,
Г.
Установка для параметра «EnablePartialRendering» значения false в элементе управления ScriptManager предотвращает ошибку, но это не оптимальное решение.Потеря преимуществ частичного рендеринга может оказаться большой проблемой, в зависимости от вашего приложения.
Для справки: я делал не то же самое, что другие люди, увидевшие ошибку.У меня есть PopupControlExtender, в котором есть список флажков.Я добавил ссылку «выбрать все» с методом javascript для программного выбора/отмены выбора всего.Я не использую кнопку изображения.Я не видел ошибки до добавления javascript, и теперь даже после ее удаления ошибка остается.Должно быть еще одно изменение, которое мне не хватает.
Я надеюсь, что это помогает кому-то...
--Мэтт