我是asp.net和c#的新手。 我试图通过从dropdownList中选择为配置文件添加一些特性 并添加到列表<>。
现在它工作正常,但我猜,当点击最后的节目或保存按钮保存列表它不显示任何东西。 这是我的示例代码
这在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的项目仅适用于本地范围吗?这就是为什么我有这个问题?请帮助,谢谢
答案 0 :(得分:0)
你是对的。回发页面时,会创建另一个代码实例,并且填写的唯一内容与页面上的控件相关,这些控件将数据存储在ViewState中。执行所需操作的最简单方法是向页面添加另一个下拉列表(隐藏或不隐藏)并将项目添加到该页面。通过这种方式,它们将存储在viewstate中,您可以跟踪它们。
答案 1 :(得分: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;
}
答案 2 :(得分: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();
}
}