最近在開發mvc3的時候發現了一個問題,就是如何在view頁面顯示多表查詢的數據,最簡單的辦法就是使用viewmodel了,以下本人使用viewmodel來實現多表查詢的3中方法,
先貼代碼再說:
1 第一種是將頁面顯示多表的數據(也就是匯總各個model表的字段),然后再viewmodel中顯示
1 public class ResultAdList 2 { 3 public int A_Id; 4 public string A_userid; 5 public int B_Id; 6 public string B_typename; 7 }
public class AdRepository { private DataAdDataContext db = new DataAdDataContext(); public IQueryable<ResultAdList> AdList { get; private set; } public AdRepository() { this.AdList = from a in db.R_ad_list join b in db.R_ad_type on a.A_typeid equals b.id select new ResultAdList { A_Id = a.id, A_userid = a.A_userid, B_Id = b.id, B_typename=b.T_ad_typename }; } }
1 public ActionResult Index() 2 { 3 return View("Index", new AdRepository()); 4 }
view中這樣寫:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<Dmj.Models.AdRepository>" %> <% foreach (var item in Model.AdList) { %> <% } %>
接着第二中方法:
1 public class demoshopViewModels 2 3 { 4 5 public IEnumerable<商店> shop { get; set; } 6 7 public IEnumerable<演示> demo { get; set; } 8 9 }
linq方法可參照AdRepository方法,大同小異,路過
view中這樣寫
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcApplication.ViewModels.demoshopViewModels>" %> <%foreach (var item in Model.shop) { //這裡是shop Models } %> <%foreach (var item in Model.demo) { //這裡是demo Models } %>
第三種直接上圖:
model中
viewmodel圖
view圖
目測三種方法都差不多,只有細微的差別,個人覺得第三中最簡單也是最常用的