本文對ASP.NET MVC的模型、視圖和控制器做一次進階概述,換句話說,就是解釋ASP.NET MVC中的"M""V""C"。閱讀完本文後,你應該理解ASP.NET MVC中的各個部分是如何協同工作的,同時也應該知道ASP.NET MVC應用程式和ASP應用程式及ASP.NET Web表單應用程式之間的不同之處了。
注意HomeController有兩個方法(函數):Index()和About(),這兩個方法對應控制器暴露的兩個行為,URL /Home/Index調用HomeController.Index()方法,URL /Home/About調用
HomeController.About()方法。
控制器中所有公用方法都是以控制器行為方式暴露的,這意味著任何在瀏覽器地址欄敲入對應的URL都可以調用這些方法,這一點需要注意。
理解視圖
HomeController類暴露了兩個控制器行為:Index()和About(),它們返回的都是一個視圖。視圖包括HTML標記和發送給瀏覽器的內容,在ASP.NET MVC應用程式中,一個視圖就相當於一個頁面。
你必須在正確的位置建立你的視圖,HomeController.Index()行為返回位於下列路徑的視圖:
ViewsHomeIndex.aspx
HomeController.About()行為返回位於下列路徑的視圖:
ViewsHomeAbout.aspx
通常,如果你想為控制器行為返回一個視圖,你必須在視圖檔案夾下建立一個與控制器名字相同的子檔案夾,在這個子檔案夾中,還必須建立一個與控制器行為同名的.aspx檔案。
清單3中顯示了About視圖檔案的內容。
清單3 About.aspx
<%@ Page Language="VB" MasterPageFile="~/Views/Shared/
Site.Master"
AutoEventWireup="false" CodeBehind="About.aspx.vb" Inherits="MvcA
pplication1.About" %>
<asp:Content ID="aboutContent" ContentPlaceHolderID="MainC
ontent" runat="server">
<h2>About Us</h2>
<p>
TODO: Put <em>about</em> content here.
</p>
</asp:Content>
如果你忽略清單3中的第一行,視圖剩下的部分呢內容都是標準的HTML,你可以在裡面添加任何需要的HTML內容。
視圖和ASP頁面或ASP.NET Web表單非常類似,視圖可以包括HTML內容和指令碼,你可以用你熟悉的.NET程式設計語言(如c#或VB .NET)編寫指令碼,使用指令碼來顯示動態內容,如資料庫資料。
理解模型
我們已經討論了控制器和視圖,我們要討論的最後一個主題是模型,什麼是MVC模型呢?
MVC模型包括應用程式的所有邏輯,這些邏輯在視圖和控制器都是沒有的,模型應該包括應用程式所有的商務邏輯和資料庫訪問邏輯,例如,如果你使用LINQ到SQL訪問你的資料庫,那麼你就應該在模型(Models)檔案夾下建立LINQ到SQL的類(dbml檔案)。
視圖應該只包括與使用者介面有關的邏輯,控制器應該只包括暴露給請求返回正確視圖的最小邏輯或將使用者重新導向到另一個控制器行為的邏輯,除此之外其它任何邏輯都應該包括在模型中。
通常,你應該為控制器減肥,為模型增肥,控制器方法應該只包括很少的代碼,如果控制器行為太臃腫了,你應該思考如何將其中隱含的邏輯遷移到模型中去。
小結
本文向你介紹了ASP.NET MVC各個不同組件之間的差異,並且學習了URL路由如何將入站請求路由到合適的控制器行為的,還學習了視圖是如何返回給瀏覽器的,最後還介紹了模型應該包括哪些商務邏輯和資料庫訪問邏輯。
原文:Understanding Models, Views, and Controllers 作者:Stephen Walther