0

初投稿時間、

私は MVC abit をいじっています...複数の入力フィールドを持つビューがあります。これらのフィールドのいくつかは投稿時に空白になる可能性があります。

投稿のコントローラー内のアクション メソッドは次のようになります。

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

私は自分のデータベースで動的な Linq クエリを実行するために動き回っている DynamicQuery 拡張機能を使用しており、実行のためにデータ アクセス レイヤーに渡される 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 を入力するだけでよいのでしょうか、それとももっと洗練されたパターンやプラクティスを使用できるでしょうか?

これがでたらめのように思われる場合は申し訳ありませんが、アイデアを跳ね返す人やフレームワークを掘り下げる時間はありません。

4

3 に答える 3

2

modelbinder を使用してデータをバインドする

于 2009-05-19T19:33:03.747 に答える
1

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

public ActionResult Filter(Search search)  
{ 
    return View("Search", new MemberViewData(search) 
    {
        Results = _dataRepository.GetMember(search)
    }); 
}
于 2009-05-19T19:41:28.613 に答える
0

Tadeusz が述べたように、ModelBinder は MemberViewData を構築するのに役立ちます。これにより、フェッチされる結果のみが残ります。

また、このビュー データ オブジェクトの作成方法を理解し、単純に委任するプレゼンテーション サービスを作成することもできます。ただし、ここではモデルバインダーのアプローチをお勧めします。

于 2009-05-19T19:38:01.990 に答える