在mvc3中,默認是一張數據表對應一個model,一個視圖 view只顯示一個model。
但是有些時候,我們一個視圖上可能需要顯示多個model的內容,即一個網頁可能要展示多張表的信息,那怎么辦呢,這時候,ViewModel就能派上用途了。
ViewModel,顧名思義,專為view服務的model,專門為view視圖准備的model。
我這里假設有兩個張數據表,Article表和Information表,都需要在首頁上顯示出來,看看下面的步驟:
一、先寫出兩張表各自對應的model和相應的DbContext文件,這一步比較簡單,我就省略了。
二、創建一個類(ViewModel),取名為indexData
public class IndexData { public IEnumerable<Information> Information { get; set; } public IEnumerable<Article> Article { get; set; } public IndexData() { Entities db = new Entities(); this.Information = db.Information.ToList(); this.Article = db.Article.ToList(); } }
三、控制器Controller
public ActionResult Index() { IndexData ind = new IndexData(); return View(ind); }
四、view視圖
@model IndexData
<div> <ul> @foreach (var item in Model.Information.Take(8)) { <li>@Html.DisplayFor(m => item.InfoTitle)</li> } </ul>
</div>
<div> <ul> @foreach (var item in Model.Article.Take(8)) {
<li>@Html.DisplayFor(m => item.ArticleTitle)</li> } </ul> </div>
如果Article表又想分成兩部分來顯示,則可以這樣:
@model IndexData
<div> <ul> @foreach (var item in Model.Article.Where(c=>c.type=="news").Take(8)) { <li>@Html.DisplayFor(m => item.InfoTitle)</li> } </ul> </div>
<div> <ul> @foreach (var item in Model.Article.Where(c=>c.type=="story").Take(8)) { <li>@Html.DisplayFor(m => item.InfoTitle)</li> } </ul> </div>
我這里的ViewModel里面只涉及到了兩張表,實際上更多張表也是一樣的。有些門戶網站的首頁,可能需要顯示十幾個model,做法完全是一樣的。