ASP.Net UpdatePanel ImageButton вызывает "this._postbackSettings.async является нулем или не объект" - PullRequest
3 голосов
/ 12 сентября 2008

Я получаю эту ошибку на панели обновления в popupControlExtender, которая находится внутри dragPanelExtender.

Я вижу, что многие другие люди имеют эту проблему и имеют различные исправления, ни одно из которых не помогло мне.

Мне бы хотелось услышать логическое объяснение того, почему это происходит, и надежный способ избежать подобных проблем в будущем.

Я обнаружил, что, как и другие, утверждают, что эта ошибка не возникает, когда триггером является кнопка LinkButton, а не кнопка ImageButton, но все еще задаюсь вопросом, есть ли у кого-нибудь объяснение.

Ответы [ 3 ]

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

У меня была такая же проблема, и я действительно не нашел никакого удовлетворительного решения, пока не остановился на 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 становится доступным.

Надеюсь, это поможет,

G.

1 голос
/ 02 января 2009

Установите для параметра «EnablePartialRendering» значение false в элементе управления ScriptManager, чтобы предотвратить ошибку, но это не является оптимальным решением. Потеря выгоды от частичного рендеринга может быть большой проблемой, в зависимости от вашего приложения.

Просто для протокола, я делал не то же самое, что другие люди, которые видели ошибку. У меня есть PopupControlExtender, в котором есть флажок. Я добавил ссылку «выбрать все» с помощью метода javascript, чтобы программно выбрать / отменить выбор всех. Я не использую кнопку Image. Я не видел ошибки до добавления javascript, и теперь даже после ее удаления ошибка остается. Я должен пропустить еще одно изменение.

Надеюсь, это кому-нибудь поможет ...

- Matt

1 голос
/ 12 сентября 2008

Мое лучшее предположение состоит в том, что UpdatePanel не может правильно записать собственное свойство "async" в запрос обратной передачи. Это, вероятно, связано с блокировкой одного из элементов управления, обертывающих его (мое внутреннее чувство заключается в том, что это popupControlExtender - он имеет странное поведение с панелями обновления, поскольку он предназначен для управления событиями внутри него в целях его отображения / скрытия).

Я бы порекомендовал либо удалить панель обновлений, либо развернуть собственное решение для вашей конкретной бизнес-потребности, либо внедрить собственный всплывающий скрипт (возможно, немного легче написать).

Кстати, для некоторой предыстории "this._postbackSettings.async" - это ваша инфраструктура AJAX.NET, пытающаяся выяснить, является ли это асинхронным вызовом или нет. Вы могли бы преодолеть это, установив это программно перед отправкой обратной передачи (перехватите событие обратной передачи и добавьте поле в запрос обратной передачи, если его еще нет).

Просто некоторые мысли ... Я не верю, что есть ответ "включай и работай" для этого!

...