0

私はasp.netとc#の初心者です。dropdownList から選択して list<> に追加することで、プロファイルにいくつかの特性を追加しようとしています。

今は問題なく動作しますが、最後の表示または保存ボタンをクリックして、何も表示されないリストを保存すると思います。これが私のサンプルコードです

これは Page_Load メソッドの前にあります。

public  List<string> myList = new List<string>();


protected void Button1_Click(object sender, EventArgs e)
{     
    myList.Add(DropDownList1.SelectedItem.Value);
}
protected void Button2_Click(object sender, EventArgs e)
{
    myList.Remove(DropDownList1.SelectedItem.Value);
}
protected void Button3_Click(object sender, EventArgs e)
{
    foreach (string item in myList)
    {
        Label1.Text = item.ToString();
    }
}

ボタン1のクリックで、myListに追加されたアイテムはローカルスコープ専用だと思いますか?だから私はこの問題を抱えているのですか?助けてください、ありがとう

4

3 に答える 3

0

あなたの問題は、ポストバック中にページが呼び出され、ページがレンダリングされた後に変数が消えるときにのみ、変数 myList が「生きている」ことです。必要なのは、変数の値を 2 回のポストバック呼び出しで保存する方法です。これは、次のサンプルのように実行できます。

public List<string> myList
{
   get
   {
      if( ViewState("myList") == null )
      {
        return new List<string>();
      }
      return (List<string>)ViewState("myList") 
   }

   set
   {
        ViewState("myList")  = value;
   }
}

protected void Button1_Click(object sender, EventArgs e)
{
    var tmp = myList;
    tmp.Add(DropDownList1.SelectedItem.Value);
    myList = tmp;


}

protected void Button2_Click(object sender, EventArgs e)
{
    var tmp = myList;
    tmp.Remove(DropDownList1.SelectedItem.Value);
    myList = tmp;

}
于 2013-05-29T09:38:53.270 に答える
0

変化する

public  List<string> myList = new List<string>();

    public List<string> MyList
    {
        get
        {
            if (ViewState["Items"] == null)
                ViewState["Items"] = new List<string>() ;
            return (List<string>)ViewState["Items"];
        }
        set
        {
            ViewState["Items"] = value;
        }
    }

Button3_Click以下のようにイベントを変更します

protected void Button3_Click(object sender, EventArgs e)
{
    foreach (string item in myList)
    {
        Label1.Text += item.ToString();
    }
}
于 2013-05-29T09:39:22.900 に答える
0

あなたは正しいです。ページがポストバックされると、コード ビハインドの別のインスタンスが作成され、データを ViewState に格納するページ上のコントロールに関連するものだけが埋められます。必要なことを行う最も簡単な方法は、ページに別のドロップダウンリストを追加し (非表示かどうかに関係なく)、そこに項目を追加することです。このようにして、それらはビューステートに保存され、それらを追跡できます。

于 2013-05-29T09:34:41.210 に答える