標籤:簡單 display nbsp div 首頁 技術分享 控制器 tor form
在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,做法完全是一樣的。
ViewModel在MVC3中的應用:一個view顯示多個model