0

我是 asp.net 和 c# 的新手。我正在尝试通过从下拉列表中选择并添加到列表<>来向配置文件添加一些特征。

现在它工作正常,但我猜什么时候,单击最终显示或保存按钮来保存它不显示任何内容的列表。这是我的示例代码

这在 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();
    }
}

我猜在 button1 单击时,添加到 myList 的项目仅适用于本地范围,对吗?所以这就是为什么我有这个问题?请帮忙,谢谢

4

3 回答 3

0

您的问题是变量 myList 仅在回发期间调用页面并且在呈现页面后变量消失时才“存在”。您需要一种在两次回发调用中保存变量值的方法。这可以在以下示例中完成:

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 回答