我正在使用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;
}
}
答案 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
无法确保位置。