ASP.NET MVC ViewModel不可遺忘的好幫手
- 2009-03-16
- 38088
- 0
ASP.NET MVC 是一個新的玩意,在資料非常少的情況之下,想要知道用法可以直接k source code,也可以去參考別人寫的,demo因為在趕案子所以沒時間去看別人的code,就在上個星期五和保哥提到我自己覺得我的code好醜唷,保哥看了一下,也很不客氣的回我說,嗯滿醜的...但礙於和時間賽跑,所以我沒辦法自己改code所以就商請保哥假日的時候幫我改一下,順便我假日時回去k一下Scottgu放出來的eBook,demo在這提出我覺得很不錯的應用ViewModel。
demo學習ASP.NET MVC 是完全看官網的 Tutorials 所以他有提到的我才會用...因此如果我今天需要由Controller傳很多玩意給View那demo就會這樣寫
public ActionResult Index()
{
ViewData["Message"] = "Welcome to ASP.NET MVC!";
ViewData["UserLevel"] = 3;
ViewData["IsMaster"] = true;
ViewData["kind"] = (from a in database select a);
ViewData["type"] = (from a in database2 select a);
return View();
}
ViewData是一個ViewDataDictionary 類別,他可以吃所有的東西,是Controller傳資料給View的一個利器。
那我們的View就會這樣
<h2><%= Html.Encode(ViewData["Message"]) %></h2>
oox您好您的等級為<%=ViewData["UserLevel"]%>
<%if ((bool)ViewData["IsMaster"]){%>
您可以砍站ViewDataDictionary
<% } else{%>
你不夠格啦
<%{%>
<%foreach (var item in (IEnumerable)ViewData["kind"] ) {%>
…
<%} %>
<%foreach (var item in (IEnumerable)ViewData["type"] ) {%>
…
<%} %>
很醜吧,醜其實不是它的重點,重點是物件都不是強型別,所以無法在編譯的時候發生錯誤,demo有過幾次因為手誤打錯字,找了很久找不到錯誤,後來才發現了是因為錯字的原因,白白浪費很多時間。因此我們要盡量的使用強型別來撰寫程式碼就是這個原因。
如果以上的Code我們改用ViewModel會有什麼改變呢?
先在Controller上新增欄位
public class MyViewModel
{
public string Message { get; set; }
public int UserLevel { get; set; }
public bool IsMaster { get; set; }
public dbKind kind { get; set; }
public dbType type { get; set; }
}
然後ActionResult變成這樣
return View(new MyViewModel()
{
Message = "Welcome to ASP.NET MVC!",
UserLevel = 3,
IsMaster = true,
kind = (from a in database select a),
type = (from a in database select a),
});
View先來繼承此類別
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcApplication1.Controllers.MyViewModel>" %>
<h2><%= Html.Encode(Model.Message) %></h2>
oox您好您的等級為<%=Model.UserLevel%>
<%if (Model.IsMaster)
{%>
您可以砍站ViewDataDictionary
<% }
else
{%>
你不夠格啦
<%}%>
<%foreach (var item in Model.type ) {%>
…
<%} %>
<%foreach (var item in Model.kind){%>
…
<%} %>
看到了嗎?全部變成了強型別不但可以用點的點出來而且不會錯,重點還有一個,就是他徹底的解決了demo之前想在一頁View撈很多個資料表資料時的麻煩,如果你有在學ASP.NET MVC這篇對你應該多少會有幫助!! 共同學習成長吧








Roslyn 魔法工坊:打造你的 Source Generator [2025-12-20]開課 共7H
回應討論