2011-12-29 10 views
2

Still Learning MVC3、EF。今のところ私はMySqlに接続していますが、それは関係ないと思います。簡単にするために、テストアプリケーションに1つのデータベースを使用することにしました。データを区別するカテゴリを追加しました。たとえば、ニュース、イベント、情報、ページカテゴリがあります。例えば、ホームページなどのビューにコンテンツを掲載する場合、最新の5つのニュース項目(ニュースカテゴリ)、最新の5つのイベント(イベントカテゴリ)、ウェルカムテキスト(情報カテゴリ)をリストしたいと思います。私は、ホームページのさまざまなセクションでこれらを表示するためにpartialViewsを作成することができました。しかし、私はこれらのPartialViewのそれぞれで同じテーブルを何度も何度も何度もクエリしていて、LINQクエリでwhere cat=....でフィルタリングしているので、間違ってこれをやっているようです。 これが練習であるべきかどうかを確認してください。これを行うにはより良い方法がありますか?MVC3パーシャルビュー

答えて

6

あなたは、次の操作を行うことができます:

コントローラー:

public ActionResult Home() 
{ 
    IEnumerable<MyDateRecords> myData = LinqQueryToGetAllTheDataUnFiltered(); 
    ViewData.Model = new MyViewData { MyData = myData; } 
    return View(); 
} 

のViewModelクラス:

public class MyViewData 
{ 
    List<MyDataRecords> MyData { get; set; } 
    List<MyDataRecords> News { get { return MyData.Where(m => m.Category = "News"); } } 
    List<MyDataRecords> Events { get { return MyData.Where(m => m.Category = "Events"); } } 
} 

ビュー:

@model MyViewModel 

@Html.Partial("NewsPartial", Model.News) 
@Html.Partial("EventsPartial", Model.Events) 

部分:

@model IEnumerable<MyDataRecord> 

我々は一度だけデータを照会し、ちょうどこれはかなり非効率的である各部分

+0

非常に精巧な@Bassam Mehanniありがとう – Diin

+0

私は助けてくれることを嬉しく思います。このスタイルでは、この種のデータを表示するビューであるViewModelを追加していますが、実際にモデルで完全ではない、それはビューに直接関連している単純なロジックを持っている必要があります –

+0

あなたの提案されたソリューションはエラーを生成しています – Diin

0

このタイプのデータを提示する単純な方法については、あなたがしていることは問題ありません。コントローラで使用するPartialViewメソッドについては、OutputCacheAttributeを参照してください。

0

に異なるセットを通過したこの方法です。しかし、データベースにクエリすることは、しばしば任意の要求のボトルネックであるため、これに気づいたことは良いことです。

まず、そのデータをディクショナリまたはモデルに取得してから、部分ビューに渡して、Bassamの概要と同様にレンダリングする必要があります。理想的には、これはコントローラでMVCのパラダイムを守り、その後メインビューに渡され、適切なデータが部分ビューに渡されます。

ASP.NET MVCの高度な使い慣れた知識を身に付けたら、キャッシュの調査を開始できます。あなたが更新/同期/などについて心配する必要があるので、急速に変化しているデータを持っていれば、ややこしいことになるので、今はキャッシュしていません。

関連する問題