2011-12-29 148 views
2

靜態學習MVC3,EF。現在我連接到MySql,但我認爲這不會相關。爲了簡單起見,我決定爲我的測試應用程序使用一個數據庫,並且我添加了一個類別來區分數據。例如,我有一個新聞,事件,信息和網頁類別。現在當在主頁上列出視圖中的內容時,我想列出最新的5個新聞項目(新聞類別),最新的5個事件(事件類別),歡迎文本(信息類別)。我已經能夠創建partialViews在主頁的不同部分列出這些。但我覺得我做錯了,因爲在這些部分視圖的每一箇中,我一遍又一遍地查詢同一個表,並在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 2011-12-29 04:03:56

+0

當然..很高興我可以幫助,請注意,在這種風格中,我們添加了所謂的ViewModel,這是一種視圖,可以將這種數據提供給視圖,但是不是真正的完整模型,它應該有簡單的邏輯,直接關係到視圖 – 2011-12-29 04:10:58

+0

你的建議解決方案正在產生錯誤 – Diin 2012-01-19 18:29:41

0

對於呈現這種類型的數據的簡單方法,你在做什麼很好。您應該查看OutputCacheAttribute以獲取您在控制器上使用的任何PartialView方法。

0

這是非常低效的。但是你注意到這一點很好,因爲查詢數據庫往往是任何請求中的瓶頸。

對於初學者,您應該將數據檢索到字典或模型中,然後將其傳遞給部分視圖以呈現類似於Bassam概述的內容。理想情況下,應該在Controller中關注這一點,以堅持MVC範例,然後傳遞給主視圖,然後將主視圖傳遞給局部視圖。

一旦你得到了更高級的/熟悉ASP.NET MVC,你可以開始研究緩存。因爲你需要開始擔心更新/同步/等等,所以如果你的數據變化很快,那麼我現在就遠離緩存。