c#updatepanel with timer page_load

时间:2009-07-08 17:00:32

标签: c# asp.net ajax asp.net-ajax

我现在正在尝试一些AJAX。我有一个自定义控件出现在我的母版页上,其中有一个更新面板和一个计时器。计时器触发,面板更新,一切都很花哨。除了有些操作我不希望它在每次刷新时执行。似乎每次刷新都会发生整个页面生命周期。我想设置变量,并在刷新时保留它们的值。有没有办法让它只执行timer_tick调用中的内容?

4 个答案:

答案 0 :(得分:3)

您可以在页面加载事件中查看Request [“__ EVENTTARGET”]以查看导致回发的控件。如果是定时器控制,则跳出该功能。

假设您的计时器名为“刷新时间”:

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

答案 1 :(得分:2)

不确定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~
}

答案 2 :(得分:0)

UpdatePanels总是强制整个页面刷新。如果您只想处理页面的某个部分(并且它是固定大小),那么您可以尝试使用iframe。

或者,如果要保存变量,可以将它们放在ViewState或SessionState中,以便它们在回发之间保留

答案 3 :(得分:0)

UpdatePanels无法实现这一点......整个页面将贯穿整个生命周期。正如其他人所提到的,你可以通过使用IsPostBack或ScriptManager的IsInAsyncPostBack来限制发生的处理,但最终这对复杂页面来说不是一个很好的解决方案。

但是,您可以使用页面方法在页面中仅执行一个静态方法,但您必须自己进行Javascript调用并更新UI。以下是一些例子: