ASP.Net UpdatePanel ImageButton вызывает сообщение «this._postbackSettings.async имеет значение null или не является объектом»

StackOverflow https://stackoverflow.com/questions/57586

Вопрос

Я получаю эту ошибку на панели обновления в 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, и теперь даже после ее удаления ошибка остается.Должно быть еще одно изменение, которое мне не хватает.

Я надеюсь, что это помогает кому-то...

--Мэтт

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top