2009-07-22 20 views
0

オーバーライドを避けるには?stringbuilder append if(!IsPostback)

public partial class test : System.Web.UI.Page { 
    StringBuilder sb = new StringBuilder(); 

    protected void Page_Load(object sender, EventArgs e) 
    { 

     if (!IsPostBack) 
     { 
      sb.Append("one"); 
      lbl.Text = sb.ToString(); 
     } 

    } 
    protected void cmdSb_Click(object sender, EventArgs e) 
    { 


     sb.Append("two"); 
     lbl.Text = sb.ToString(); 

    } } 

答えて

3

、あなたがに任意のポストバックを行うたびに覚えている、それだけでイベントを処理するためだとしても、フルページのライフサイクルが実行されます。それはすべて一つの大きな機能にあったかのようにこれを理解しやすくするために、あなたのコードを考えることができ、より多くのように:もちろん

public partial class test : System.Web.UI.Page 
{ 
    // Page_Load runs for EVERYTHING 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     // -- Constructor Area 
     StringBuilder sb = new StringBuilder(); 

     // -- Page Init Area 

     // -- ViewSate is loaded 

     // -- Page Load Area 
     if (!IsPostBack) 
     { 
      sb.Append("one"); 
      lbl.Text = sb.ToString(); 
     } 

     // -- Validation controls are checked 

     // -- If valid, start handling events 

     // Handle your click event 
     if (cmdSb_Clicked) 
     { 
      sb.Append("two"); 
      lbl.Text = sb.ToString(); 
     } 


     // -- DataBinding Area 

     // -- Save ViewState   

     // -- Render Page: the class is turned into html that is sent to the browser 

     // -- Unload -- Page is disposed 

    } 
} 

これは実際には何が起こるかではありませんが、このようにそれの思考を開始し、あなたは正しい道を歩いています。この場合、clickイベントはコード!IsPostBackと同時に実行されることはありませんが、毎回新しいStringBuilderを使用していることに注意してください。ページのライフサイクルの詳細についてはこちらを

チェック:SENSを作る
http://msdn.microsoft.com/en-us/library/ms178472.aspx

+0

私はまだそれがなぜsb.Append文字列を追加する以下の例でそれを取得していない偉大な説明のためにジョエル、ありがとう。ボタンをクリックすると、ポストバックが発生します。以前と同じように動作するはずです。 StringBuilder sb = new StringBuilder(); protected void Page_Load(オブジェクト送信者、EventArgs e) { sb.Append( "one"); lbl.Text = sb.ToString(); } プロテクトvoid cmdSb_Click(オブジェクト送信者、EventArgs e) { sb.Append( "two"); lbl.Text = sb.ToString(); } –

+0

"1"だけをstringbuilderに追加すると、ポストバックではありません。イベントの発生をクリックすると、ポストバックになります。私が期待しているように、この場合は「2つ」の代わりに「onetwo」を見ていますか? –

3

ASP.NETを使用すると、ビューステートやセッション状態のようなものにそれを保存しない限り、あなたのStringBuilderのインスタンスがポストバックを通じて持続しないことを意味している、ステートレスです。

+0

。ありがとうございました –