1

私はテキストボックスに次のものを入れます:

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-loop を参照)。

4

1 に答える 1

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;
        }
    }
}
于 2013-07-19T17:23:19.647 に答える