2009-06-12 5 views
0

私はこれを行う最良の選択肢を探すために検索してきました。ASP.Net - 単一エンティティの双方向データバインディング - オプション、最善の方法...独自のロールですか?

基本的に、カスタムクラス/エンティティの単一のインスタンス、つまりPersonに、複数のコントロール(テキストボックス、ドロップダウンリスト、チェックボックスなど)の2通りのデータバインディングを行いたいとします。ことができます「: - :

<asp:FormView ID="FormView1" runat="server" DataKeyNames="OrderID" 
     DataSourceID="SqlDataSource1" DefaultMode="Edit"> 
     <EditItemTemplate> 
      OrderID: 
      <asp:Label ID="OrderIDLabel1" runat="server" Text='<%# Eval("OrderID") %>' /> 
      <br /> 
      CustomerID: 
      <asp:DropDownList ID="CustomerIDDropDownList" runat="server" 
      DataValueField='CustomerID' DataSourceID="CustomerDataSource" 
      DataTextField="CompanyName" 
      SelectedValue='<%# Bind("CustomerID") %>' 
      /> 
      EmployeeID: 
      <asp:TextBox ID="EmployeeIDTextBox" runat="server" 
      Text='<%# Bind("EmployeeID") %>' /> 
      <br /> 

いくつかの問題:これは、ObjectDataSourceコントロールを使用することに限定される(すなわち

それのようなので、使用している、これを行うには(?のみ)の方法です
- 2番目の(おそらくは同じレイアウトの)読み込み専用のテンプレートを定義することを強くお勧めします....読み込み専用のテンプレートをインテリジェントにレンダリングできるいくつかのメカニズムを持つことはいいでしょう。編集テンプレートから派生したビューのみ。
- バインディング宣言テキスト=「<%の#バインド( 『社員』)%>」緩くスペルミス に非常に脆弱で、型付けされた - など

だから私は推測する私の最初の質問は、ASPです:FormViewコントロール単一のエンティティの宣言的なデータバインディングを行うASP.Netの唯一の方法ですか?

第2に、何らかの種類の双方向バインディング機構を手渡すことがいかに実現可能でしょうか?私はそれが反射ベースでなければならないと思うが、私はそれで生きることができた。どのようにaspxページ内のバインディング関係を宣言するかについて誰でもお勧めですか?適切な方法は次のようになります:
テキスト=「<%番号のMySuperDuperBind( 『社員』)%>」

そしてどこかのページがレンダリングされるように私MySuperDuperBindの実装が呼び出されます(どこ?)....これがどうやってやっていくのかは私にとって少しです。私が読み取り専用でレンダリングしたい場合は、フォームから編集可能なUIコントロールを削除し、それを対応する読み取り専用バージョンに置き換えるセカンダリ関数を呼び出すことができます(つまり、TextboxはLabelで置き換えられます)。

別の代替ルートが離れてWebフォームから取得して、このような、この非常に見栄えの良い解決策として、クライアント側のテンプレート溶液に起こっている:
http://weblogs.asp.net/dwahlin/archive/2009/05/03/using-jquery-with-client-side-data-binding-templates.aspx

しかし、私は適切にasp.netのWebサービスを作成する方法を見当もつかないこのタイプのアーキテクチャでデータを検索して保存するために使用されます。

アイデア?

答えて

1

は、ASPです:単一のエンティティの宣言型データバインディング を行うには ASP.NetでFormViewコントロール唯一の方法は?

もありますが、同じ問題があります。

私はほとんど2ウェイデータバインディングをやめました。プロトタイプ作成には最適ですが、完全なソリューションへの道のりの80〜90%を得ますが、最後の10〜20%は悪夢です。重要でないオブジェクトをバインドすると、常に多くのイベントハンドラがスパゲッティコードのような動作をカスタマイズするようになります。

私は通常2つの方法があります:

MapEntityToView(entity) 
MapViewToEntity(entity) 

私はそれぞれ、エンティティを表示するには、ページから移入するために呼び出します。書き込むのは面倒かもしれませんが、データバインディングの問題に取り組む必要はありません。

私は読み取り専用ページとリストコントロールの項目を表示するために広範囲に1方向バインディングを使用します。

+0

悲しいことに、私は正しい答えとしてあなたのものをマーキングしています。参照:http://stackoverflow.com/questions/2435185/not-possible-to-load-dropdownlist-on-formview-from-code-behind および http://stackoverflow.com/questions/2470533/automapper-a-viable-alternative-to-two-way-databinding-a-formview – tbone

関連する問題