2013-07-19 174 views
1

我填補我texboxes有:文本框不會清除

foreach (User u in userInfo) 
{ 
    txtNickname.Text = u.Nickname; 
    txtFirstName.Text = u.FirstName; 
    txtLastName.Text = u.LastName; 
    txtEmail.Text = u.Email; 
} 

我的文本框現在充滿了從數據庫中的數據。

比如我在所有的texboxes填補新的價值觀和我按一下按鈕,不是這樣發生:

if (txtNickname.Text != String.Empty && txtFirstName.Text != String.Empty && txtLastName.Text != String.Empty && txtEmail.Text != String.Empty) 
{ 
    //TODO 
} 

但當我調試:文本框的值是舊值(該值來自foreach循環),而不是我填入文本框的新值。

這是怎麼發生的?我正在從文本框中加載數據庫中的一些數據,之後我自己更改了文本框的值,並且當我調試文本框時,值仍然是數據庫值(請參閱foreach-loop)。

+0

使用'.Equals()' – chancea

+2

是所謂的Page_Load事件中第一個循環?你檢查了Page.IsPostback嗎? – Steve

+0

史蒂夫建議。如果您覆蓋每個Page_Load上的值,那麼只有當它不是回發時(例如'if(!IsPostBack){/ *從db * /}填充),您才需要限制它從數據庫中提取。否則,你只是覆蓋用戶提交的內容。 – Matthew

回答

3

如果在Page_Load事件中執行第一個循環,則應確保在頁面由於單擊該按鈕而回發時不再執行。 MSDN上的Page.IsPostBack

更多信息

private void Page_Load() 
{ 
    if (!IsPostBack) 
    { 
     // This code should be executed only when the page is being 
     // rendered for the first time not when is responding to a postback 
     // raised by the <runat="server"> controls 
     UserInfoCollection userInfo = GetUserInfoCollection(); 

     foreach (User u in userInfo) 
     { 
      txtNickname.Text = u.Nickname; 
      txtFirstName.Text = u.FirstName; 
      txtLastName.Text = u.LastName; 
      txtEmail.Text = u.Email; 
     } 
    } 
} 
+0

這似乎是個問題,但是很高興知道爲什麼會有'foreach'。 – Matthew

+0

@Matthew同意,這是沒有意義的。只有當我認爲有一些支持方法返回一個集合,但集合只包含一個用戶... – Steve

+0

是的,它是在Page_Load中。這工作!非常感謝。我使用foreach的原因是我正在從數據庫中讀取用戶信息(基於會話)並將其放入列表中。 – Swag