2008-08-22 17 views
5

フォームに「ASP:TextBox」コントロールがいくつかあります(約20個)。
フォームが読み込まれると、データベースからテキストボックスが読み込まれます。
ユーザーは入力された値を変更することができ、フォームを送信するときに、サーバーに送信された値を取り込み、条件付きで保存します(ビジネスロジックによって決定されます)。
テキストボックスのうち、1つを除くすべてが意図したとおりに動作します。フォームポストにテキストボックスデータが含まれていません。[ASP.NET C#]

ポストバック時に奇数ボックスアウトには、ユーザーがボックスに入力した更新値は含まれません。
アプリケーションをデバッグするときに、myTextBox.Textには、ユーザーが入力した新しい値ではなく、事前に設定された古い値が反映されていることが明らかです。
他のすべてのボックスには、それぞれのユーザー指定の値が正しく表示されます。

回避策が見つかりました。
私の解決策は、Request.Formオブジェクトのテキストボックスの値を基本的に抽出することでした:Request.Form[myTextBox.UniqueID]には、ユーザー指定の値が含まれています。

ここで何が起こっているのですか?
私が言及したように、他のテキストボックスには、ユーザが入力した値が正しく入力されています。この問題のあるテキストボックスには、関連するロジックがありません。
このテキストボックスとの主な違いは、これは複数行のボックス(メモを入力するためのもの)で、ASP.NETの「入力」タグの代わりにHTMLの「textarea」タグとしてレンダリングされると考えられます。

答えて

8

初めてデータをロードするのは、!Page.IsPostBack?また、テキストボックスの表示状態が有効になっていますか?

1

ページのライフサイクルの順序と、フォームのデータバインド先を覚えておいてください。

  • PREINIT
  • 初期
  • ロード
  • あなたのコントロールのイベントハンドラは
  • 初期化や負荷の
あなたがコントロールのイベントハンドラで値を読んでいる場合

、まだデータバインディング、あなたがよ古い価値を持っている。

トリックは、常に正しいイベントでデータバインドを行うか、ポストバックをチェックしてデータバインドを行わないことです。

2

私は2番目になりますJonathan's responseデータバインディングの設定を確認します。

テキストボックスにViewStateが必要ない場合(つまり、フォーム送信までにポストバックが発生しない場合)は、無効にする必要があります。

のデータを正しく読み取るように管理していると言われているので、データの保存に問題がないようです。のデータが戻ってきます。したがって、私はあなたのデータバインディングコードで問題が読み込まれると言うでしょう。

6

これはいつも私に起こります。

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     // populate text boxes from database 
    } 
} 
1

あなたが最初にデータのみ!Page.IsPostBackをロードしていますか?また、テキストボックスの表示状態が有効になっていますか?

私はViewStateのチェックを忘れていましたが、ここで私の投稿を作成する前に無効になっていないことを確認することを覚えていました。私はさらに、EnableViewState = "true"を設定して確認します。

解決策を見つけましたが、ここではほとんどの回答と一致していました。フォームは実際にそのデータを複数回ロードしていました(これは意図的な動作です)。私はこのフィールドのためのいくつかの特別なコードを実装し、すべてがうまくいきます。

あなたの返信ありがとうございます!

関連する問題