0

私の Web フォームには、コード ビハインドのプロパティにバインドされた多くの TB があります。

<asp:TextBox ID="tbFirstName" Text="<%# Contact.FirstName %>" runat="server" />
<script language="c#">
    public Contact Contact
    {
        get
        {
            return (Contact)ViewState["Contact"];
        }
    }
</script>
<script language="VB">
    Public ReadOnly Property Contact() As Contact
        Get
            return ViewState("Contact");
        End Get
    End Property
 </script>

Contact はそのプロパティです。

ユーザーがテキストを挿入したら、すぐに Contact オブジェクトにバインドする必要があります。たとえば、ユーザーがキーを押したときや、フォーカスを失ったとき (TextChanged) も良いでしょう。

(手動ですべての TB からデータを取得して Contact オブジェクトを更新するのではなく) 動的に行う方法はありますか?

私は実際に、フォーム本体に広がる単純なテキスト ボックスを使用して、双方向のデータ バインディングを実現したいと考えています。

注: もちろん、項目を DB に保存するつもりはありません。状態マネージャーに存在するオブジェクト (連絡先) が必要なだけです。

4

2 に答える 2

3

Web アプリケーションについて話していることを認識していますか? ユーザーのブラウザで実行されます。データベースを更新するには、AJAX またはポストバックを介してサーバーに往復する必要があります。キーストロークごとにこれを実行しますか?


あなたのコメントから、キーストロークごとにデータベースに書き戻そうとしていないことは明らかです。

それでも、データ バインディングはこの方法では機能しません。データ バインディングは、ASP.NET における純粋にサーバー側のアクションです。Bind メソッドによって提供される双方向のデータ バインディングでさえ、完全なポストバックでしか機能しません (ただし、UpdatePanel で試したことはありません)。

実験として、新しいページを作成し、双方向のデータ バインディングを設定します (例については、データの挿入、更新、および削除の概要の「より柔軟なデータ変更ユーザー インターフェイスのための FormView の使用」を参照してください)。「正常に」動作するようになったら、FormView を UpdatePanel に配置して、Bind がまだ動作するかどうかを確認します。その場合は、すべてのキーストロークで UpdatePanel を起動できるかどうかを確認してください。

于 2009-07-13T03:45:07.383 に答える
2

デスクトップ アプリケーションを開発しているように考えるのはやめましょう。あなたはそうではないからです。テキストボックスがクライアントに「住んでいる」間、「連絡先」オブジェクトはサーバーに住んでいます。サーバーオブジェクトを更新すると非常にコストがかかります。サーバーとクライアントの間で新しいデータを使用して非同期転送を行う必要があります。そんなに短い間隔では不可能ですらありません。テキストボックスに遅延を追加してから、データをサーバーに転送できると考えました。なぜこれが必要なのですか?

于 2009-07-13T03:45:12.530 に答える