2009-07-08 14 views
1

今、いくつかのAJAXを試しています。私は更新パネルとタイマーがある私のマスターページに表示されるカスタムコントロールを持っています。タイマーが起動し、パネルが更新され、すべてがダンディです。それを除いて、すべてのリフレッシュで実行したくない操作がいくつかあります。ページのライフサイクル全体がリフレッシュごとに発生するようです。設定したい変数があり、リフレッシュ時にその値を保持します。 timer_tickコールに含まれるものだけを実行させる方法はありますか?c#updatepanel with timer page_load

+0

? –

答えて

0

UpdatePanelsは常にページ全体を強制的に更新します。ページの特定の部分だけを処理したい場合(そして固定サイズの場合)、iframeを使用してみることができます。あなたは、変数を保存したい場合、彼らはあなたが要求を見て取ることができる

2

ポストバック間で保持されるように

また、あなたはどちらかのViewStateかのSessionStateでそれらを置くことができる[「__のEventTarget」]ページロードイベントでポストバックの原因となったコントロールを確認します。それがタイマー制御であれば、関数から飛び出します。あなたのタイマーを想定し

は「refreshtimer」と呼ばれている:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Request["__EVENTTARGET"] == "refreshtimer") 
    { 
     return; 
    } 
    // etc 
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~ 
} 
0

これはUpdatePanelsでは不可能です。ページ全体がライフサイクル全体に渡ります。他にも述べたように、IsPostBackまたはScriptManagerのIsInAsyncPostBackを使用して行われる処理を制限することはできますが、最終的には複雑なページのための優れた解決策にはなりません。

しかし、Page Methodsを使用してページ内に静的メソッドを1つだけ実行することはできますが、Javascriptを自分で呼び出してUIを更新する必要があります。ここではいくつかの例を示します。timer_tickコードは何をしているのです