2013-12-08 15 views
0

我想構建此ASP.NET示例。我想要從List添加/檢索聊天室用戶。無法從列表中使用foreach檢索暱稱

當我運行這個時,我得到沒有錯誤,但是我沒有看到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

關於區分大小寫的注意事項,尾隨空格......並且確保您嘗試添加一些connectionid,然後在單擊Button2之前在「TextBox3」中正確鍵入。 –

+0

@ user3071591檢查我的答案 –

回答

-1

HTTP是無狀態協議 - 變量和對象並不在回發堅持。每次點擊一個按鈕時,頁面都會重新構建,並且users將被重新初始化,所以這絕不會起作用。您需要將用戶列表保存在某個地方。理想情況下,這將是一個數據庫,但您也可以使用會話狀態或cookie。

http://msdn.microsoft.com/en-us/library/ms178581.aspx

請注意,如果您使用會話狀態,有各種缺點,你需要考慮,如事實陷阱,本次會議是重置每當應用程序池回收和事實(如你所想象的那樣)按會話存儲,這意味着如果用戶使用「返回」按鈕或打開多個選項卡,則會遇到各種奇怪的行爲。

+0

不是你這樣做的方式,他們沒有。就像我說的,你需要堅持到某個地方。有很多方法可以實現這一目標,但代碼隱藏領域並不是其中之一。 –

+0

不知道爲什麼這是downvoted,因爲它完全解釋了爲什麼發生的事情正在發生,並提出了明確的選擇。 –