c # updatepanel с таймером page_load

Я сейчас экспериментирую с AJAX. У меня есть пользовательский элемент управления, который появляется на моей главной странице, где есть панель обновления и таймер. Таймер срабатывает и панель обновляется и все денди. За исключением того, что есть некоторые операции, которые я не хочу выполнять при каждом обновлении. Кажется, что весь жизненный цикл страницы происходит с каждым обновлением. Есть переменные, которые я хочу установить, и сохранить их значение при обновлении. Есть ли способ заставить его выполнять ТОЛЬКО что в вызове timer_tick?

 Ryan Abbott08 июл. 2009 г., 19:09
Что делает код timer_tick?

Ответы на вопрос(4)

Вы можете взглянуть на Запрос [& quot; __EVENTTARGET & quot;] в событии загрузки страницы, чтобы увидеть, какой элемент управления вызвал обратную передачу. Если это управление таймером, выпрыгните из функции.

Предполагая, что ваш таймер называется "refreshtimer":

protected void Page_Load(object sender, EventArgs e)
{
   if (Request["__EVENTTARGET"] == "refreshtimer")
   {
       return;
   }
   // etc

UpdatePanels всегда принудительно обновляет всю страницу. Если вы хотите, чтобы обрабатывалась только определенная часть страницы (и она имела фиксированный размер), то вы можете попробовать использовать iframe.

В качестве альтернативы, если вы хотите сохранить переменные, вы можете поместить их в ViewState или SessionState, чтобы они сохранялись между постбэками.

Не уверен, как выглядит ответная запись в AJAX.Net, но я обычно защищаю свои другие элементы управления и контент, проверяя обратную запись;

protected void Page_Load(object sender, EventArgs e)
{

     // if its a post back then my controls should already be setup... 
     if (!Page.IsPostBack)
     {
          InitControlData();
     }    
}

и тогда оно должно попасть в вашу обработку событий?

protected void timer_tick(object sender, EventArgs e)
{
    // Do my Ajaxy work~
}

Это невозможно с UpdatePanels ... вся страница будет проходить через весь жизненный цикл. Как уже упоминалось, вы можете ограничить обработку, которая происходит, используя IsPostBack или ScriptManager IsInAsyncPostBack, но в конечном итоге это не будет хорошим решением для сложных страниц.

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

http://www.singingeels.com/Articles/Using_Page_Methods_in_ASPNET_AJAX.aspx http://encosia.com/2009/07/21/simplify-calling-asp-net-ajax-services-from-jquery/ http://weblogs.asp.net/craigshoemaker/archive/2008/09/29/using-jquery-to-call-asp-net-ajax-page-methods.aspx

Ваш ответ на вопрос