私はこれを行う最良の選択肢を探すために検索してきました。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サービスを作成する方法を見当もつかないこのタイプのアーキテクチャでデータを検索して保存するために使用されます。
アイデア?
悲しいことに、私は正しい答えとしてあなたのものをマーキングしています。参照: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