1

ページが最初に読み込まれたときに、文字列 str が「私はここにいます」というテキストで初期化されるようにします。また、ボタン (btn_click) をクリックしてページが更新されると、値は初期化された値と同じになります。しかし、うまくいきません。コンソールに次のように表示されます。

初めてページを読み込んだとき:「私はここにいます」

1.ボタンをクリックしたとき:「空」

2.そして、「私はここにいる」という価値観を維持すべきだと思います。助けてください。

public partial class Default : System.Web.UI.Page
{
    string str = "empty";

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                str = "I am here";
                Debug.Write("VALUE: " + str + "\r\n");
            }

            else
            {
                Debug.Write("VALUE: " + str + "\r\n");
            }
    }

    protected void btn_Click(object sender, EventArgs e)
        {
            //do something...
        }
}
4

1 に答える 1

1

サーバーへの個々の要求ごとに、ページの新しいインスタンスが作成されます... 最初の要求 ( IsPostBack==false) と後続のすべての要求( ) の両方IsPostBack==trueです。

これは、ページをリクエストするたびにstr変数が で初期化されることを意味しますが、最初のロード時 (つまり) にのみ設定されます。ポストバックが発生したときにまだ保持できるように、何らかの方法で保存する必要があります。"empty""I am here"IsPostBack==false

オブジェクトを使用するなど、いくつかの方法がありますが、このようSessionに使用することをお勧めしViewStateます...

string str = "empty";

protected void Page_Load(object sender, EventArgs e)
{
  if (!Page.IsPostBack)
  {
    str = "I am here";
    ViewState["str"] = str;
    Debug.Write("VALUE: " + str + "\r\n");
  }
  else
  {
    str = (string)ViewState["str"];
    Debug.Write("VALUE: " + str + "\r\n");
  }
}
于 2015-09-07T17:37:56.107 に答える