我想构建这个ASP.NET示例。我希望从List
添加/检索聊天室用户。
当我运行它时,我没有得到任何错误,但是我没有看到TextBox3中给出的connectionid的任何缺口。
我怎样才能让它发挥作用?
谢谢。
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Add new user" OnClick="Button1_Click" Width="231px" />
<asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
<asp:TextBox ID="TextBox4" runat="server"></asp:TextBox>
<asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="Fetch user by connectionid" />
这是背后的代码:
List<User> users = new List<User>();
class User
{
public string connectionid { get; set; }
public string nick { get; set; }
}
protected void Button1_Click(object sender, EventArgs e) //add new user
{
users.Add(new User { connectionid = TextBox1.Text , nick = TextBox2.Text });
}
protected void Button2_Click(object sender, EventArgs e) //find the nick for given connectionid
{
foreach (User _user in users)
{
if (_user.connectionid == TextBox3.Text)
{
TextBox4.Text = _user.nick;
break;
}
}
}
答案 0 :(得分:1)
您的“用户”列表似乎在每次加载页面时都会被初始化,因此您将丢失列表信息。
在按钮1单击后,获取一种在会话中存储用户列表的方法(请参阅:http://msdn.microsoft.com/en-us/library/6ad7zeeb%28v=vs.100%29.aspx),以便您可以在button2_click处理程序中使用它。
答案 1 :(得分:0)
HTTP是一种无状态协议 - 变量和对象不会在回发中持续存在。每次单击按钮时,都会再次构建页面并重新初始化users
,因此这将永远不会起作用。您需要在某处保留您的用户列表。理想情况下,这将是一个数据库,但您也可以使用会话状态或cookie。
http://msdn.microsoft.com/en-us/library/ms178581.aspx
请注意,如果您使用会话状态,则需要考虑各种缺点和缺陷,例如每当应用程序池回收时会重置会话以及存储它的事实(就像您'一样) d)想象)每个会话,这意味着如果用户使用“后退”按钮或打开多个选项卡,您将遇到各种奇怪的行为。