2013-04-09 2 views
3

Как я понимаю, частичные обновления страниц с помощью ASP.NET AJAX приводят к вызову обработчика JavaScript pageLoad().Определите, был ли и какой частичный обратный вызов произошел в pageLoad() с JavaScript в .NET.

Мой вопрос: Есть ли общий способ определения в JavaScript из функции Pageload() ...

я) Если постбэк произошло частичное обновление страницы или нет.

ii) Если да, то какая панель была обновлена.

Мое приложение использует комбинацию .NET UpdatePanels & Telerik RadAjaxPanels. Я ищу универсальное (желательно JavaScript) решение, которое не требует, чтобы я указывал уникальную функцию обратного вызова на стороне клиента для каждой панели и не устанавливал некоторый флаг из каждого обработчика события postback, чтобы идентифицировать себя на стороне клиента.

ответ

16

Чтобы определить, является ли обратная передача частичным обновлением или нет, вы можете использовать ScriptManager.GetCurrent(this.Page).IsInAsyncPostBack. Вот пример:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Page.IsPostBack) 
    { 
     // get a reference to ScriptManager and check if we have a partial postback 
     if (ScriptManager.GetCurrent(this.Page).IsInAsyncPostBack) 
     { 
      // partial (asynchronous) postback occured 
      // insert Ajax custom logic here 
     } 
     else 
     { 
      // regular full page postback occured 
      // custom logic accordingly     
     } 
    } 
} 

А чтобы получить панель обновления, вызвавшей PostBack, вы можете посмотреть в ScriptManager.GetCurrent(Page).UniqueID и анализировать ее. Вот пример того, что делает:

public string GetAsyncPostBackControlID() 
{ 
    string smUniqueId = ScriptManager.GetCurrent(Page).UniqueID; 
    string smFieldValue = Request.Form[smUniqueId]; 

    if (!String.IsNullOrEmpty(smFieldValue) && smFieldValue.Contains("|")) 
    { 
     return smFieldValue.Split('|')[0]; 
    } 

    return String.Empty; 
} 

Ссылки:

+0

О сладко! Две вещи ... Мне пришлось изменить символ ' в Contains() для строки «|», а после .Split() я взял первую половину [0], которая дает обновленную панель, а не [1], которая предоставляет элемент управления, вызвавший обновление. – Bumpy

+1

Кроме того, для других читателей ... Чтобы обеспечить результат для моего javascript после частичного обновления, мне пришлось поместить некоторые скрытые поля в отдельную UpdatePanel и установить его атрибут: UpdateMode = «Always». Это приводит к обновлению содержимого этой панели при ЛЮБОЙ обратной передаче - даже если это была частичная обратная передача на отдельной панели обновлений. Затем мой javascript может считывать значения скрытых полей, чтобы определить, была ли это частичная обратная передача или нет, и получить идентификатор обновленной панели. Все хорошо сейчас, спасибо! :-) – Bumpy

+1

Спасибо Иан за действительно хороший ответ. Это был именно тот код, который мне нужен. Многие ответы дают одно или два предложения, а затем направляют искателя к ссылкам. Благодарим за краткое изложение деталей! +1 – RLH

Смежные вопросы