C# 文本框不';不清楚

C# 文本框不';不清楚,c#,asp.net,C#,Asp.net,我在我的箱子里装满: foreach (User u in userInfo) { txtNickname.Text = u.Nickname; txtFirstName.Text = u.FirstName; txtLastName.Text = u.LastName; txtEmail.Text = u.Email; } 我的文本框现在充满了数据库中的数据 例如,我在所有文本框中填充新值,然后单击按钮,结果如下: if (txtNickname.Text !

我在我的箱子里装满:

foreach (User u in userInfo)
{
    txtNickname.Text = u.Nickname;
    txtFirstName.Text = u.FirstName;
    txtLastName.Text = u.LastName;
    txtEmail.Text = u.Email;
}
我的文本框现在充满了数据库中的数据

例如,我在所有文本框中填充新值,然后单击按钮,结果如下:

if (txtNickname.Text != String.Empty && txtFirstName.Text != String.Empty && txtLastName.Text != String.Empty && txtEmail.Text != String.Empty)
{
   //TODO
}
但是当我调试时:文本框的值是旧值(来自foreach循环的值),而不是我在文本框中填充的新值


为什么会这样?我在文本框中从数据库加载一些数据,然后我自己更改文本框的值,调试时文本框的值仍然是数据库值(请参见foreach循环).

如果在Page_Load事件中执行第一个循环,则应确保在单击按钮后将页面发回时不会再次执行

更多关于MSDN的信息

private void Page_Load()
{
如果(!IsPostBack)
{
//此代码应仅在正在创建页面时执行
//第一次呈现不是在响应回发时
//由控件引发
UserInfoCollection userInfo=GetUserInfoCollection();
foreach(userInfo中的用户u)
{
txtname.Text=u.昵称;
txtFirstName.Text=u.FirstName;
txtLastName.Text=u.LastName;
txtEmail.Text=美国电子邮件;
}
}
}

页面加载事件中是否调用了第一个循环?你查过Page.IsPostback了吗?史蒂夫建议的。如果要覆盖每个页面加载上的值,则需要将其限制为仅当它不是回发时才从数据库中提取(即
If(!IsPostBack){/*populatefrom db*/}
)。否则,您只是覆盖了用户提交的内容。这似乎是个问题,但是如果知道为什么会有一个
foreach
@Matthew agree,这是没有意义的。只有当我假设有某种支持方法返回一个集合,但集合只包含一个用户时……是的,它在页面加载中。这管用!非常感谢你。我使用foreach的原因是,我正在从数据库中读取用户信息(基于会话),并将其放入列表中。好吧,但您知道,如果您有多个用户,上面的循环将仅显示列表中最后一个用户的信息。如果要查看所有用户,则需要gridview或类似控件
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;
        }
    }
}