ViewModel在MVC3中的應用:一個view顯示多個model


在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,做法完全是一樣的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM