我正在使用c#在Asp.Net中创建一个Web应用程序,它允许您将项目添加到列表中。
我的问题是每次点击按钮将新项目添加到列表中时,它只显示最后一项,列表计数器只显示1。
我做错了什么?
以下是代码:
public partial class home : System.Web.UI.Page
{
List<string> messageboxs = new List<string>();
public string val = "";
public string data = "";
protected void Button1_Click(object sender, EventArgs e)
{
val = "";
messageboxs.Add(text1.Text);
ListBox1.DataSource = messageboxs;
ListBox1.DataBind();
val = messageboxs.Count.ToString();
}
}
答案 0 :(得分:4)
您的列表不会在回发之间保留。
每次单击按钮时,都会创建页面类的新实例,从而创建列表。此列表为空。
答案 1 :(得分:3)
您应该阅读ASP.NET Page Life Cycle Overview。在坚果shell中,每次单击按钮都会导致页面回发,从而创建页面的新实例。您正在初始化该页面的每个实例上的空列表,因此当您将新项目添加到列表中时...它再次为空。
您需要做的是将messageboxs
存储在允许其在回发中保留的某个位置。对于您的特定示例,您可以使用ViewState例如
public partial class home : System.Web.UI.Page
{
private void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
// initialise list
ViewState["Messages"] = new List<string>();
}
}
protected void Button1_Click(object sender, EventArgs e)
{
// get the old messages list
var messages = (List<string>)ViewState["Messages"];
messages.Add(text1.Text);
ListBox1.DataSource = messages;
ListBox1.DataBind();
// store the new messages list
ViewState["Messages"] = messages;
}
}
答案 2 :(得分:1)
问题在于ASP.Net的工作原理。 ASP.Net正在每次点击按钮时重新创建“主页”页面。然后,这将重新创建列表,并向其中添加一个项目。您需要一种在按钮单击之间保存列表的方法。例如,Session就是这样的。
答案 3 :(得分:0)
每次回发都会再次创建列表。您应该查看ListBox1
中的现有项目并将其重新添加到List<string>
然后重新绑定。
答案 4 :(得分:0)
将消息框设为静态变量
静态列表messageboxs = new List();
但这使得变量可以从任何页面请求中访问。 这意味着如果其他人打开此页并尝试添加项目,他/她最终会将项目添加到其他人的列表中。
尝试使用会话状态或视图状态。