2009-05-19 8 views
0

最初の投稿時間を検索します。私のアクションコントローラコードが</p> <p>私はMVCのABITで遊んでてきた...私は、これらのフィールドの一部がポストに空白にすることができ、複数の入力フィールドを持つビューを持っている、素人

ポストのためのコントローラ内部のアクションメソッドは、私は、私は」私のデータベース上で動的なのLINQ querysを実行するために周り蹴りされたDynamicQuery拡張子を使用してきたこの

public ActionResult Filter(int? id, string firstName, string lastName, bool? isMember) 

ようになりますこれを、データアクセスレイヤに渡して実行するSearchオブジェクトにカプセル化しました。

しかし、私はまた、入力値とクエリの結果を表示するためにビューに戻されるカスタマイズされたViewDataオブジェクトを持っています。

SearchオブジェクトのプロパティとViewDatasの両方を設定する必要があるので、コードでは少し厄介なようです。

public ActionResult Filter(int? id, string firstName, string lastName, bool? isMember) { 
var search = new Search { 
Id = id, 
FirstName = firstName, 
LastName = lastName, 
Member = isMember 
}; 

var memberViewData = new MemberViewData { 
Id = id, 
FirstName = firstName, 
LastName = lastName, 
Member = isMember 
}; 

memberViewData.Results = _dataRepository.GetMember(search); 

return View("Search", memberViewData); 

} 

私は終わっこれを考えていますし、実際にはデータアクセス層に値を渡すと、コントローラでのViewDataを移入、または私は使用することができますはるかにエレガントなパターンや習慣があるでしょうか?

申し訳ありませんこれがダンプのように見える場合、アイデアを飛び越えてフレームワークを掘り下げる時間はありません。タデウシュが述べたと同様

答えて

1

あなたのスニペットによると、MemberViewDataクラスにはSearchクラスのプロパティに加えてResultsプロパティがあります。したがって、まず、MemberViewDataをSearchから派生させ、Searchインスタンスをパラメータとして受け入れ、その基本プロパティをそのインスタンスに割り当てるコンストラクタを定義します。次に、私はアクションメソッドを次のように変更します:

public ActionResult Filter(Search search) 
{ 
    return View("Search", new MemberViewData(search) 
    { 
     Results = _dataRepository.GetMember(search) 
    }); 
} 
+0

intrestingですが、私が理解しているように、入力フィールドはビューからActionMethodに渡すことができます。 –

+0

ちょうどこれで遊ぶ時間を見つけることができました.Mvcはデフォルトでオブジェクトのプロパティにフォームフィールドをバインドしようとします。 –

+0

はい、そうです。パラメータバインディングよりも細かい制御が必要な場合は、オーバーライドできるデフォルトのモデルバインダーを使用します。 –

2

使用modelbinderはModelBinderをフェッチするだけの結果を残している、あなたのためのMemberViewDataを構築することができ、データ

0

をバインドします。

また、このビューデータオブジェクトを作成して単にそれに委譲する方法を理解しているプレゼンテーションサービスを作成することもできます。私はここでモデルのバインダーのアプローチを好むだろう。

関連する問題