ユーザーが入力したときにデータが保存されるように、Web フォームのテキストボックスをバインドする方法はありますか?
-
12-09-2019 - |
質問
私の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 からデータを手動で取得して連絡先オブジェクトを更新するのではなく) 動的に行う方法はありますか?
実際には、フォーム本体に展開された単純なテキストボックスを使用して双方向のデータバインディングを実現したいと考えています。
注記:もちろんアイテムを DB に保存するつもりはありません。ステート マネージャーに存在するオブジェクト (連絡先) が必要なだけです。
解決
Web アプリケーションについて話していることに気づいていますか?ユーザーのブラウザ上で実行されます。データベースを更新するには、AJAX またはポストバックを介してサーバーと往復する必要があります。本当にキーストロークごとにこれを実行しますか?
コメントから、キーストロークごとにデータベースに書き戻そうとしているわけではないことがわかります。
ただし、この方法ではデータ バインディングは機能しません。データ バインディングは、ASP.NET における純粋にサーバー側のアクションです。Bind メソッドによって提供される双方向データ バインディングでさえ、完全なポストバックでのみ機能します (ただし、UpdatePanel では試したことはありません)。
実験として、新しいページを作成し、双方向のデータバインディングを設定します (「より柔軟なデータ変更ユーザー インターフェイスのための FormView の使用」を参照) データの挿入、更新、削除の概要 たとえば)。「正常に」動作するようになったら、FormView を UpdatePanel に配置して、バインドがまだ動作するかどうかを確認してください。その場合は、キーストロークごとに UpdatePanel を起動できるかどうかを確認してください。
他のヒント
あなたはデスクトップアプリケーションを開発しているように思考停止!ヨーヨーではないので。 「連絡先」オブジェクトは、新しいデータでサーバとクライアント間の非同期転送を行う必要があるでしょう、サーバーオブジェクトは非常にコストがかかるリフレッシュ、クライアントに「住んでいる」あなたのテキストボックス間にサーバーに住んで、そしてそれをやってそうでショートパンツ間隔でも可能ではないでしょう。あなたがサーバーにデータを転送することになる後にテキストボックスに遅延を追加することができます思いました。なぜあなたはこれを必要でしょうか?