2012-05-28 4 views
2

Как я понимаю, при обновлении UpdatePanel вся страница перестраивается, но только контент внутри UpdatePanel фактически перезагружается на странице.Предотвращение UpdatePanel для загрузки всей страницы на сервере

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

Пример: В верхней части страницы (за пределами UpdatePanel) отображается набор итогов, а внутри UpdatePanel у меня есть сетка с кнопками «Следующая страница». Когда я нажимаю «next», я хочу, чтобы сетка обновлялась, но я не хочу, чтобы сервер снова запрашивал базу данных для всех итогов.

Каков наилучший способ для этого?

ответ

0

Вы всегда можете проверить, есть ли значение свойства IsAsync страницы, чтобы избежать блокировки блоков кода.

0

Стандартным подходом было бы иметь проверку! PostBack перед запуском логики итогов. Таким образом, они вычисляются только при первой загрузке страницы, и после этого они удерживаются в ViewState элемента управления, который вы используете для их отображения.

В качестве альтернативы, если вы используете привязку данных (с ObjectDataSource), тогда это будет обрабатываться автоматически, поскольку привязка данных произойдет только при первом загрузке страницы.

1

Вы можете проверить, является ли обратная передача из обновленной панели. Если это так, вы просто не вычисляете итоговые значения.

Если у вас есть несколько UpdatePanels, то вы можете проверить, что UpdatePanel сделал постбэк, проверив это:

bool isUpdatePanelPostBack 
     = ScriptManager.GetCurrent(Page).AsyncPostBackSourceElementID 
      .Equals(yourUpdatePanel.UniqueID); 

if(!isUpdatePanelPostBack) { 
    //calculate your totals 
} 

Если у вас есть только один UpdatePanel на странице, то вы можете просто проверить IsInAsyncPostback для установки BOOL:

bool isUpdatePanelPostback = ScriptManager.GetCurrent(Page).IsInAsyncPostBack; 
Смежные вопросы