Как проверить, отправляет ли UpdatePanel ответ? - PullRequest
9 голосов
/ 18 ноября 2011

Есть ли способ определить, выполнил ли <asp:UpdatePanel /> обратную передачу Ajax, аналогично тому, как мы можем использовать ...

if(!Page.IsPostBack) { ...snip }

... чтобы определить, происходит ли обратная передача от кнопки отправки.

Я пытаюсь обнаружить запросы Ajax от jQuery, но он также принимает запросы UpdatePanel, которые я хочу исключить, например ...

if (Request.IsAjaxRequest() && !Page.IsUpdatePanelPostback)
{
    // Deal with jQuery Ajax
}

Ответы [ 3 ]

14 голосов
/ 18 ноября 2011

Вы можете проверить, была ли обратная передача асинхронной и была ли она выдана панелью обновления, просматривая следующие свойства:

ScriptManager.GetCurrent(Page).IsInAsyncPostback
ScriptManager.GetCurrent(Page).AsyncPostbackSourceElementID
13 голосов
/ 18 ноября 2011

Я не знаю, будет ли это работать лучше, чем ваше решение, но вы пробовали?:

if (ScriptManager.GetCurrent(Page).IsInAsyncPostBack)
{
    Control ctrl = GetControlThatCausedPostBack(Page);
    if (ctrl is UpdatePanel)
    {
        //handle updatepanel postback
    }
}

private Control GetControlThatCausedPostBack(Page page)
{
    //initialize a control and set it to null
    Control ctrl = null;

    //get the event target name and find the control
    string ctrlName = Page.Request.Params.Get("__EVENTTARGET");
    if (!String.IsNullOrEmpty(ctrlName))
        ctrl = page.FindControl(ctrlName);

    //return the control to the calling method
    return ctrl;
}
3 голосов
/ 18 ноября 2011

Попробуйте следующее:

var controlName = Page.Request.Params.Get("__EVENTTARGET");
if (!String.IsNullOrEmpty(controlName))
{
     // Use FindControl(controlName) to see whether 
     // control is of UpdatePanel type
}

Полезные ссылки:

...