在Asp.Net c#</t>中列表<t>的问题

时间:2012-12-13 10:30:43

标签: c# asp.net

我正在使用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();
 }
}

5 个答案:

答案 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();

但这使得变量可以从任何页面请求中访问。 这意味着如果其他人打开此页并尝试添加项目,他/她最终会将项目添加到其他人的列表中。

尝试使用会话状态或视图状态。