2013-07-19 123 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