将新项添加到列表中。我认为每次都要覆盖原始项目,或者每次都创建一个新列表

时间:2012-08-21 12:59:18

标签: c# asp.net

我正在使用asp.net 4和C#。我通过点击按钮的事件将项目添加到列表中时遇到问题。在按钮上单击我想从文本框中读取文本,将其转换为int并将其添加到类型为int的List的底部。然后,我想在标签中显示列表中的每个项目。问题是它每次只显示最近的文本框条目。我花了很长时间看这个并尝试不同的东西,但不能弄清楚我做错了什么。请有人帮忙吗?

我的代码如下:

namespace CSI
{
    public partial class _Default : System.Web.UI.Page

{

string lablelItems;

List<int> numbers = new List<int>();

    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void AddToSeqBTN_Click(object sender, EventArgs e)
    {
        int number;
        number = Convert.ToInt32(AddNumberTXB.Text);
        numbers.Add(number);
        printtolabel(numbers);

    }

    private void printtolabel(List<int> numbers)
    {
        foreach (int n in numbers)
        {
            lablelItems += " " + n.ToString();
            CurrentSequenceLBL.Text = lablelItems;
        }
    }

3 个答案:

答案 0 :(得分:3)

HTTP是无状态的。这意味着在ASP.NET中,所有对象都会在页面生命周期结束时被销毁。因此,只要页面呈现给客户端,它就不再存在于服务器的内存中。

所以你需要在某个地方保留这些物品。

Nine Options for Managing Persistent User State in Your ASP.NET Application.

答案 1 :(得分:1)

在你的处理程序方法

AddToSeqBTN_Click

只需这样做:

CurrentSequenceLBL.Text += " " + Convert.ToInt32(AddNumberTXB.Text); 

答案 2 :(得分:0)

正在为您的网页收到的每个回发重新实例化列表numbers。您必须在某处存储它的引用,例如Session(在服务器上)或将其发送到ViewState(到客户端)。

另外,当你说“将它添加到底部”时,是文字吗?我的意思是,位置对你很重要吗?因为,如果是,则应使用其他类,例如Queue,因为List无法确保位置。