質問

オーバーライドを回避するにはどうすればよいですか?

 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();

    } }
役に立ちましたか?

解決

毎回覚えておいてください どれでも ポストバックは、たとえイベントを処理するだけであっても、 満杯 ページのライフサイクルが実行されます。これを理解しやすくするために、コードを次のように、すべてが 1 つの大きな関数であるかのように考えることができます。

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

    }
}

もちろん、これは実際に起こることではありませんが、このように考え始めれば、正しい方向に進んでいます。この場合、クリック イベントは決して同時に実行されないことに注意してください。 !IsPostBack コードを作成しても、毎回新しい StringBuilder を使用することになります。

ページのライフサイクルの詳細については、ここを確認してください。
http://msdn.microsoft.com/en-us/library/ms178472.aspx

他のヒント

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top