ASP.NET MVC 如何在一個 View 內傳遞多個 Model

幾天前有網友寫信問我,如何在一個 View 內傳遞多個 Model demo在之前的文章有寫到「ASP.NET MVC 利用UserControl讓一頁可以載入多個Model 」但是該範例是在使用PartialView來實作,這次要介紹使用 ViewModels 來傳遞的方式。

<script type="text/javascript"><!-- google_ad_client = "pub-0694222449690045"; /* 468x60, 已建立 2008/1/25 */ google_ad_slot = "0101087941"; google_ad_width = 468; google_ad_height = 60; //--> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script>

在過去的經驗中了解到使用強 式型別的好處因此開發的過程中都應該要盡量使用強式型別,MVC的官網範例中並沒有直接示範在一個 View 中使用兩個 Model 的例子,因此很多初次進入 ASP.NET MVC 的朋友都會為此而困擾,基本上我們可以利用 ViewData來傳遞但是如前文說的,鬆散型別不是開發中的第一考慮,因此將其要傳遞的物件包起來而形成的 ViewModels 就是一個很好的方式。

在專案中開啟一個新的資料夾取名為 ViewModels 並且新增一個 Class 內容如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MvcApplication.ViewModels
{
public class demoshopViewModels
{
public IEnumerable<商店> shop { get; set; }
public IEnumerable<演示> demo { get; set; }
}
}

利用此 ViewModels 將兩個不同的 Model 包起來。


而在 View 內的使用方式沒什麼不同

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcApplication.ViewModels.demoshopViewModels>" %>
 
<asp:Content ID="aboutContent" ContentPlaceHolderID="MainContent" runat="server">
<%foreach (var item in Model.shop)
  {
      //這裡是shop Models
  } %>
  
<%foreach (var item in Model.demo)
  {
      //這裡是demo Models
  } %>
</asp:Content>

看了以上的 Code,應該不難發現使用多個 Models 是很 OK 的事情。但是在開發的過程中或許並不想使用強式型別來傳遞(要開 VideModels 就有人懶)因此下面在提一下使用 ViewData的方式。


使用 ViewData 就是需要在 Controller 內實作需要的資料,範例如下

public ActionResult About() {
     ViewData["shop"] = 商店;
     ViewData["demo"] = 演示;
    //以上兩個是範例,真實情況下你應該有自己的呼叫資料的方式。
    return View();
    }

  因為無法直接繼承所以在View的使用上有些許改變。

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
 
<asp:Content ID="aboutContent" ContentPlaceHolderID="MainContent" runat="server">
<%var shop = ViewData["shop"] as IEnumerable<商店>;%>
<%var demo = ViewData["demo"] as IEnumerable<演示>;%>
 
<%--demo 習慣將會用到很多次的 ViewData 直接宣告在頁面最上方,並且利用這種方式讓其也可以擁有強式型別的優勢。--%>
 
<%foreach (var item in shop)
  {
      //這裡是shop Models
  } %>
  
<%foreach (var item in demo)
  {
      //這裡是demo Models
  } %>
</asp:Content>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值