ASP.NET MVC ViewModel不可遺忘的好幫手
- 2009-03-16
- 35798
- 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這篇對你應該多少會有幫助!! 共同學習成長吧
回應討論