<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=ASP.NET_MVC_Framework</id>
	<title>ASP.NET MVC Framework - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=ASP.NET_MVC_Framework"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=ASP.NET_MVC_Framework&amp;action=history"/>
	<updated>2026-06-23T17:35:44Z</updated>
	<subtitle>在这个wiki上该页的修订历史</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=ASP.NET_MVC_Framework&amp;diff=580105&amp;oldid=prev</id>
		<title>imported&gt;InternetArchiveBot：​补救1个来源，并将0个来源标记为失效。) #IABot (v2.0.9.5</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=ASP.NET_MVC_Framework&amp;diff=580105&amp;oldid=prev"/>
		<updated>2025-02-03T23:22:29Z</updated>

		<summary type="html">&lt;p&gt;补救1个来源，并将0个来源标记为失效。) #IABot (v2.0.9.5&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{update|time=2013-11-19T07:38:02+00:00}}&lt;br /&gt;
{{noteTA|G1=IT}}&lt;br /&gt;
&lt;br /&gt;
{{infobox software&lt;br /&gt;
| name                   = ASP.NET MVC Framework&lt;br /&gt;
| logo                   = &lt;br /&gt;
| screenshot             = &lt;br /&gt;
| caption                = &lt;br /&gt;
| developer              = [[Microsoft]]&lt;br /&gt;
| discontinued           = yes&lt;br /&gt;
| replaced_by            = [[ASP.NET Core]]&lt;br /&gt;
| genre                  = [[應用程式開發框架|Web應用程式]]、[[MVC]]&lt;br /&gt;
| license                = [[Apache License]] 2.0&lt;br /&gt;
| programming language   = .NET 程式語言，例如[[C♯|C#]]、[[VB.NET]]&lt;br /&gt;
| website                = {{url|http://www.asp.net/mvc/}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ASP.NET MVC Framework&amp;#039;&amp;#039;&amp;#039;是微軟在[[ASP.NET]]中所添加的一組類別庫，這組類別庫可以使用[[MVC|Model-View-Controller]]的[[软件设计模式|設計模式]]來開發ASP.NET的應用程式。它與現有的ASP.NET應用程式並沒有衝突，所以兩者是可以並行的。ASP.NET MVC Framework被包裝在System.Web.Mvc.dll中，並利用[[ASP.NET Routing]]來支援動作流以及[[URL Rewriting]]的能力，讓它可以更貼近Web的發展以及Web 2.0的特性。對於多數有[[Active Server Pages|ASP]]開發經驗的開發人員來說看起來比較不陌生，但對於沒有接觸過像ASP、[[PHP]]、[[JSP]]、[[Perl]]這些Web開發工具的開發人員來說，相對的不容易入門。ASP.NET MVC 的第一個版本於2009年3月17日釋出RTM版本，最新的ASP.NET MVC 5.2則是於2014年12月24日正式發行。&lt;br /&gt;
&lt;br /&gt;
微軟於 ASP.NET Core 中提出下一代的 MVC 框架，稱為 [[ASP.NET Core MVC]]。&lt;br /&gt;
&lt;br /&gt;
== 原理 ==&lt;br /&gt;
&lt;br /&gt;
ASP.NET MVC是遵循[[軟體]]模式的Model-View-Controller來發展，其中Model指的是資料或是业务邏輯元件，View是呈現給使用者看的[[資訊]]，而Controller則是接取來自使用者的指令與資料，並將Model與View做整合的[[控制器]]，當[[伺服器]]接到對ASP.NET MVC[[應用程式]]的要求時，伺服器（IIS）會先使用UrlRoutingModule(ASP.NET Routing的 [[HTTP]] 模組)，由它來解析是否有包含ASP.NET MVC應用程式的URL，若有，則會產生一個&amp;#039;&amp;#039;&amp;#039;MvcRouteHandler&amp;#039;&amp;#039;&amp;#039;物件，這個物件會裝載執行的必要資訊，並且會呼叫包含在[[URL]]中的Controller的Execute方法來執行工作&amp;lt;ref&amp;gt;{{Cite web |url=http://msdn.microsoft.com/en-us/library/dd410269.aspx |title=Controllers and Action Methods in MVC Applications |accessdate=2009-08-31 |archive-date=2009-08-21 |archive-url=https://web.archive.org/web/20090821213730/http://msdn.microsoft.com/en-us/library/dd410269.aspx |dead-url=no }}&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Controller&amp;#039;&amp;#039;&amp;#039;物件是基於&amp;lt;code&amp;gt;IController&amp;lt;/code&amp;gt;介面的規則所定義，提供針對HTTP要求做回應的一個執行工具，在ASP.NET MVC中已實作一個預設的類別 Controller，提供了必要的基礎功能，另外也發展了一個 Controller 工廠，稱為 [[Controller Factory]]，以&amp;lt;code&amp;gt;IControllerFactory&amp;lt;/code&amp;gt;介面定義，亦提供了&amp;#039;&amp;#039;&amp;#039;DefaultControllerFactory&amp;#039;&amp;#039;&amp;#039;，開發人員可以利用基本的類別以及利用它們來衍生自己的 Controller 或 Controller Factory 來實作自己的控制器邏輯功能。&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Model&amp;#039;&amp;#039;&amp;#039;物件則是為ASP.NET MVC提供資料，不過它沒有基礎類別，而是使用.NET Framework一般性的資料結構或是現在的[[ADO.NET]]資料物件，像是List、Dictionary、DataTable、DataReader與DataSet等等，當然也可以是自己開發的商業物件，這些資料會透過ASP.NET MVC的&amp;#039;&amp;#039;&amp;#039;ModelBinder&amp;#039;&amp;#039;&amp;#039;工具類別來與Controller整合，ModelBinder本身是支援泛型(Generic)的，因為各種型別的資料它都可以使用。在ASP.NET MVC中提供了一個&amp;#039;&amp;#039;&amp;#039;DefaultModelBinder&amp;#039;&amp;#039;&amp;#039;物件，可支援大多數的.NET Framework資料型別，以及[[陣列]]和已實作像是IList、IDictionary以及ICollection等介面的物件&amp;lt;ref&amp;gt;{{Cite web |url=http://msdn.microsoft.com/en-us/library/dd410405.aspx |title=Models and Model Binders in MVC Application |accessdate=2009-08-31 |archive-date=2009-08-15 |archive-url=https://web.archive.org/web/20090815080143/http://msdn.microsoft.com/en-us/library/dd410405.aspx |dead-url=no }}&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
Model會在Controller執行動作時，作為一個ActionResult物件方式傳回給MvcHandler物件，而這個物件即會指定要顯示的View物件，像是下列程式碼所示：&lt;br /&gt;
&lt;br /&gt;
{{squoteh}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;  line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Web.Mvc;&lt;br /&gt;
using System.Web;&lt;br /&gt;
using System;&lt;br /&gt;
&lt;br /&gt;
    // GET: /Person/&lt;br /&gt;
    public ActionResult Index()&lt;br /&gt;
    {&lt;br /&gt;
        return View(people);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // GET: /Person/Details/5&lt;br /&gt;
    public ActionResult Details(Person person)&lt;br /&gt;
    {&lt;br /&gt;
        return View(person);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // GET: /Person/Create&lt;br /&gt;
    public ActionResult Create()&lt;br /&gt;
    {&lt;br /&gt;
        return View();&lt;br /&gt;
    } &lt;br /&gt;
&lt;br /&gt;
    // POST: /Person/Create&lt;br /&gt;
    [AcceptVerbs(HttpVerbs.Post)]&lt;br /&gt;
    public ActionResult Create(Person person)&lt;br /&gt;
    {&lt;br /&gt;
        if (!ModelState.IsValid)&lt;br /&gt;
        {&lt;br /&gt;
            return View(&amp;quot;Create&amp;quot;, person);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        people.Add(person);&lt;br /&gt;
&lt;br /&gt;
        return RedirectToAction(&amp;quot;Index&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{squotef}}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{{squoteh}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;  line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
Public Class HomeController&lt;br /&gt;
    Inherits System.Web.Mvc.Controller&lt;br /&gt;
    &lt;br /&gt;
    &amp;#039;GET: /Person/&lt;br /&gt;
    Function Index() As ActionResult&lt;br /&gt;
        Return View(people)&lt;br /&gt;
    End Function&lt;br /&gt;
&lt;br /&gt;
    &amp;#039;GET: /Person/Details/5&lt;br /&gt;
    Function Details(Person person) As ActionResult&lt;br /&gt;
        Return View(person)&lt;br /&gt;
    End Function&lt;br /&gt;
    &lt;br /&gt;
    &amp;#039;GET: /Person/Create&lt;br /&gt;
    Function Create() As ActionResult&lt;br /&gt;
        Return View()&lt;br /&gt;
    End Function&lt;br /&gt;
&lt;br /&gt;
    &amp;#039;POST: /Person/Create&lt;br /&gt;
    &amp;lt;AcceptVerbs(HttpVerbs.Post)&amp;gt;&lt;br /&gt;
    Function Contact() As ActionResult&lt;br /&gt;
        If ModelState.IsValid Then&lt;br /&gt;
            Return View(&amp;quot;Create&amp;quot;, person)&lt;br /&gt;
        Else&lt;br /&gt;
            people.Add(person)&lt;br /&gt;
            Return RedirectToAction(&amp;quot;Index&amp;quot;)&lt;br /&gt;
        End If&lt;br /&gt;
    End Function&lt;br /&gt;
&lt;br /&gt;
End Class&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{squotef}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;View&amp;#039;&amp;#039;&amp;#039;物件以&amp;lt;code&amp;gt;IView&amp;lt;/code&amp;gt;與&amp;lt;code&amp;gt;IViewDataContainer&amp;lt;/code&amp;gt;等介面為主，並且以ASP.NET的各式前端介面為主要輸出工具，基於MVC的View彈性化設計考量，以往在ASP.NET Web Form的程式碼與[[HTML]]分離模式將不再存在，而是將程式碼與HTML混合的方式設計，讓開發人員可以更精確的對View進行控制，而目前 ASP.NET MVC 支援的 View 有下列幾種&amp;lt;ref&amp;gt;{{Cite web |url=http://msdn.microsoft.com/en-us/library/dd410123.aspx |title=Views and UI Rendering in MVC Applications |accessdate=2009-08-31 |archive-date=2009-09-08 |archive-url=https://web.archive.org/web/20090908003828/http://msdn.microsoft.com/en-us/library/dd410123.aspx |dead-url=no }}&amp;lt;/ref&amp;gt;：&lt;br /&gt;
&lt;br /&gt;
* .aspx網頁，由&amp;#039;&amp;#039;&amp;#039;ViewPage&amp;#039;&amp;#039;&amp;#039;來支援。&lt;br /&gt;
* .ascx使用者控制項，由&amp;#039;&amp;#039;&amp;#039;ViewUserControl&amp;#039;&amp;#039;&amp;#039;來支援。&lt;br /&gt;
* .master主版頁面，由&amp;#039;&amp;#039;&amp;#039;ViewMasterPage&amp;#039;&amp;#039;&amp;#039;來支援。&lt;br /&gt;
&lt;br /&gt;
每個 View 物件都會內含一個泛型的參數，用來裝載要呈現的資料(即Model)，然後使用類似下面的方式來呈現資料：&lt;br /&gt;
&lt;br /&gt;
{{squoteh}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asp&amp;quot;  line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;%@ Master Language=&amp;quot;C#&amp;quot; Inherits=&amp;quot;System.Web.Mvc.ViewMasterPage&amp;quot; %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Strict//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html &amp;gt;&lt;br /&gt;
&amp;lt;head runat=&amp;quot;server&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;&amp;lt;asp:ContentPlaceHolder ID=&amp;quot;TitleContent&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;link href=&amp;quot;../../Content/Site.css&amp;quot; rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;page&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div id=&amp;quot;header&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;div id=&amp;quot;title&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;h1&amp;gt;My MVC Application&amp;lt;/h1&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;div id=&amp;quot;logindisplay&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;% Html.RenderPartial(&amp;quot;LogOnUserControl&amp;quot;); %&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
            &amp;lt;div id=&amp;quot;menucontainer&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;ul id=&amp;quot;menu&amp;quot;&amp;gt;              &lt;br /&gt;
                    &amp;lt;li&amp;gt;&amp;lt;%= Html.ActionLink(&amp;quot;Home&amp;quot;, &amp;quot;Index&amp;quot;, &amp;quot;Home&amp;quot;)%&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;&amp;lt;%= Html.ActionLink(&amp;quot;About&amp;quot;, &amp;quot;About&amp;quot;, &amp;quot;Home&amp;quot;)%&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
                &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div id=&amp;quot;main&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;asp:ContentPlaceHolder ID=&amp;quot;MainContent&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;div id=&amp;quot;footer&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{squotef}}&lt;br /&gt;
&lt;br /&gt;
== 技術 ==&lt;br /&gt;
&lt;br /&gt;
在ASP.NET MVC架構中，除了Controller、Model與View三個主要部份以外，還包含了許多技術以讓這三層得以整合並交互運作。&lt;br /&gt;
&lt;br /&gt;
=== Controller ===&lt;br /&gt;
&lt;br /&gt;
Controller在ASP.NET MVC應用程式中是負責中控的角色，也是來自用戶端HTTP要求的處理核心，因此有許多處理與轉向HTTP要求的輔助技術在Controller層次都會使用到。&lt;br /&gt;
&lt;br /&gt;
==== ASP.NET 路由技術 ====&lt;br /&gt;
{{main|ASP.NET Routing}}&lt;br /&gt;
&lt;br /&gt;
用來過濾用戶端要求的URL，並藉由定義好的路由表(route table)將要求導向至正確的MVC Controller，並呼叫Controller中的Execute方法執行，而Execute方法會將HTTP動作以及實際執行的指令交給正確的函式來執行。而通常一個MVC應用程式的URL都會是類似這樣的URL格式：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://127.0.0.1/ControllerName/ActionName/ActionParameters&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
而MvcRouteHandler會拆解URL，找出目標的Controller，並且將ActionName以及ActionParameters傳給Controller中負責的函式（以ActionName來指定）。例如下列的URL會傳遞給BlogController的GetList方法：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://127.0.0.1/Blog/GetList&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 動作與方法直接整合 ====&lt;br /&gt;
&lt;br /&gt;
ASP.NET MVC利用了中介資料的技術，直接將方法對應到指定的 HTTP 動詞 (GET/POST/PUT/DELETE/HEAD等)，MvcHandler會判斷要求的類別，並將它交給URL中指定的方法來處理。目前MVC Framework可用下列的方式指定（均包含在 HttpVerbs 列舉型別中）：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;HttpVerbs.Get&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;HttpVerbs.Post&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;HttpVerbs.Delete&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;HttpVerbs.Put&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;HttpVerbs.Head&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 將資料模型與展示層直接包裝 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ViewPage&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;ViewMasterPage&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;ViewUserControl&amp;lt;/code&amp;gt;等展示物件都支援泛型物件，可以直接裝載Model資料傳遞至前端輸出，可簡化處理Model與View之間整合的動作，只要一個參數就可以將資料傳給View：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
public ActionResult GetList()&lt;br /&gt;
{&lt;br /&gt;
    return View(BlogDataModel);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
    Function GetList() As ActionResult&lt;br /&gt;
        Return View(BlogDataModel)&lt;br /&gt;
    End Function&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Model ===&lt;br /&gt;
&lt;br /&gt;
在 ASP.NET MVC 中，Model 相對不設限，可以使用內建的資料結構以及自訂的資料類別，也可以是一個商業物件，因此 Model 的彈性相當大，除了前述的資料結構外，微軟新發展的一些資料存取方式也可以應用在 Model 中，像是[[ADO.NET Entity Framework]]與[[语言集成查询|LINQ]] to SQL等技術。&lt;br /&gt;
&lt;br /&gt;
另外，MVC在伺服端資料驗證中，提供了&amp;lt;code&amp;gt;ViewDataDictionary&amp;lt;/code&amp;gt;類別，這個類別中有一個&amp;#039;&amp;#039;&amp;#039;ModelState&amp;#039;&amp;#039;&amp;#039;屬性，內含了&amp;lt;code&amp;gt;ModelStateDictionary&amp;lt;/code&amp;gt;類別，開發人員可以利用這個類別來控制資料驗證的結果，而View中輸出驗證訊息的部份會和此類別有關聯，例如下列的程式：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
[AcceptVerbs(HttpVerbs.Post)]&lt;br /&gt;
public ActionResult Create(Person person)&lt;br /&gt;
{&lt;br /&gt;
    if (person.Name.Trim().Length == 0)&lt;br /&gt;
    {&lt;br /&gt;
        ModelState.AddModelError(&amp;quot;Name&amp;quot;, &amp;quot;Name is required.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    if (person.Age &amp;lt; 1 || person.Age &amp;gt; 200)&lt;br /&gt;
    {&lt;br /&gt;
        ModelState.AddModelError(&amp;quot;Age&amp;quot;, &amp;quot;Age must be within range 1 to 200.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    if ((person.Zipcode.Trim().Length &amp;gt; 0) &amp;amp;&amp;amp; (!Regex.IsMatch(person.Zipcode, @&amp;quot;^\d{5}$|^\d{5}-\d{4}$&amp;quot;)))&lt;br /&gt;
    {&lt;br /&gt;
        ModelState.AddModelError(&amp;quot;Zipcode&amp;quot;, &amp;quot;Zipcode is invalid.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    if (!Regex.IsMatch(person.Phone, @&amp;quot;((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}&amp;quot;))&lt;br /&gt;
    {&lt;br /&gt;
        ModelState.AddModelError(&amp;quot;Phone&amp;quot;, &amp;quot;Phone number is invalid.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    if (!Regex.IsMatch(person.Email, @&amp;quot;^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$&amp;quot;))&lt;br /&gt;
    {&lt;br /&gt;
        ModelState.AddModelError(&amp;quot;Email&amp;quot;, &amp;quot;Email format is invalid.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    if (!ModelState.IsValid)&lt;br /&gt;
    {&lt;br /&gt;
        return View(&amp;quot;Create&amp;quot;, person);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    people.Add(person);&lt;br /&gt;
&lt;br /&gt;
    return RedirectToAction(&amp;quot;Index&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
在 ASP.NET MVC 2.0 中，新增了一個可以直接讓 MVC Framework 針對資料欄位進行驗證控制的模型，稱為 Model Validation，它融合了在 .NET Framework 3.5 SP1 發表的 [[ASP.NET Dynamic Data Framework]] 中 Data Annotations (資料記號) 的特性，讓開發人員可以只利用標記的方式來執行驗證，或是利用自訂的程式碼來擴充資料記號的驗證行為。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
using System.ComponentModel.DataAnnotations;  &lt;br /&gt;
namespace MvcDA {&lt;br /&gt;
    [MetadataType(typeof(ProductMD))]&lt;br /&gt;
    public partial class Product {&lt;br /&gt;
        public class ProductMD {&lt;br /&gt;
            [StringLength(50),Required]&lt;br /&gt;
            public object Name { get; set; }&lt;br /&gt;
            [StringLength(15)]&lt;br /&gt;
            public object Color { get; set; }&lt;br /&gt;
            [Range(0, 9999)]&lt;br /&gt;
            public object Weight { get; set; }&lt;br /&gt;
          //  public object NoSuchProperty { get; set; }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== View ===&lt;br /&gt;
&lt;br /&gt;
由於View是直接呈現給使用者，因此與使用者互動的部份都要由此層處理，包含資料的輸出以及以用戶端操作為主的回應（例如指令碼）等。&lt;br /&gt;
&lt;br /&gt;
==== HTML 工具類別 ====&lt;br /&gt;
&lt;br /&gt;
HTML工具類別在View中是很重要的輸出工具，它內建了輔助產生HTML標籤的工具方法，多數的HTML語法都可以利用它來產生，包含像連結(&amp;lt;a&amp;gt;)、表單(&amp;lt;form&amp;gt;)以及表單控制項等等。HTML工具是以&amp;lt;code&amp;gt;HtmlHelper&amp;lt;/code&amp;gt;類別為核心，並配合System.Web.Mvc.Html命名空間的方法，以延伸方法(Extension Method)的方式，讓產生HTML的程式就有如呼叫方法般簡單&amp;lt;ref&amp;gt;{{Cite web |url=http://msdn.microsoft.com/en-us/library/dd410405.aspx |title=Models and Model Binders in MVC Applications |accessdate=2009-08-31 |archive-date=2009-08-15 |archive-url=https://web.archive.org/web/20090815080143/http://msdn.microsoft.com/en-us/library/dd410405.aspx |dead-url=no }}&amp;lt;/ref&amp;gt;：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asp&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Index&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;&lt;br /&gt;
            Id&lt;br /&gt;
        &amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;&lt;br /&gt;
            Name&lt;br /&gt;
        &amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;% foreach (var person in Model) { %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&lt;br /&gt;
            &amp;lt;%= Html.ActionLink(&amp;quot;Details&amp;quot;, &amp;quot;Details&amp;quot;, person )%&amp;gt;&lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&lt;br /&gt;
            &amp;lt;%= Html.Encode(person.Id) %&amp;gt;&lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&lt;br /&gt;
            &amp;lt;%= Html.Encode(person.Name) %&amp;gt;&lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;% } %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
    &amp;lt;%= Html.ActionLink(&amp;quot;Create New&amp;quot;, &amp;quot;Create&amp;quot;) %&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 資料驗證 ====&lt;br /&gt;
&lt;br /&gt;
View的HTML工具可以配合Model處理資料驗證的結果，在ASP.NET中常用的ValidationSummary在這裡也支援，而且MVC的架構讓驗證資訊的輸出也更加彈性&amp;lt;ref&amp;gt;{{Cite web |url=http://msdn.microsoft.com/en-us/library/dd410404.aspx |title=Validating Model Data in an MVC Application |accessdate=2009-08-31 |archive-date=2009-08-19 |archive-url=https://web.archive.org/web/20090819101858/http://msdn.microsoft.com/en-us/library/dd410404.aspx |dead-url=no }}&amp;lt;/ref&amp;gt;：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asp&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Create&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;%= Html.ValidationSummary(&amp;quot;Create was unsuccessful. Please correct the errors and try again.&amp;quot;) %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;% using (Html.BeginForm()) {%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;fieldset&amp;gt;&lt;br /&gt;
        &amp;lt;legend&amp;gt;Fields&amp;lt;/legend&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&lt;br /&gt;
            &amp;lt;label for=&amp;quot;Name&amp;quot;&amp;gt;Name:&amp;lt;/label&amp;gt;&lt;br /&gt;
            &amp;lt;%= Html.TextBox(&amp;quot;Name&amp;quot;) %&amp;gt; Required&lt;br /&gt;
            &amp;lt;%= Html.ValidationMessage(&amp;quot;Name&amp;quot;, &amp;quot;*&amp;quot;) %&amp;gt;&lt;br /&gt;
        &amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&lt;br /&gt;
            &amp;lt;label for=&amp;quot;Age&amp;quot;&amp;gt;Age:&amp;lt;/label&amp;gt;&lt;br /&gt;
            &amp;lt;%= Html.TextBox(&amp;quot;Age&amp;quot;) %&amp;gt; Required&lt;br /&gt;
            &amp;lt;%= Html.ValidationMessage(&amp;quot;Age&amp;quot;, &amp;quot;*&amp;quot;) %&amp;gt;&lt;br /&gt;
        &amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&lt;br /&gt;
            &amp;lt;label for=&amp;quot;Street&amp;quot;&amp;gt;Street:&amp;lt;/label&amp;gt;&lt;br /&gt;
            &amp;lt;%= Html.TextBox(&amp;quot;Street&amp;quot;) %&amp;gt;&lt;br /&gt;
            &amp;lt;%= Html.ValidationMessage(&amp;quot;Street&amp;quot;, &amp;quot;*&amp;quot;) %&amp;gt;&lt;br /&gt;
        &amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&lt;br /&gt;
            &amp;lt;label for=&amp;quot;City&amp;quot;&amp;gt;City:&amp;lt;/label&amp;gt;&lt;br /&gt;
            &amp;lt;%= Html.TextBox(&amp;quot;City&amp;quot;) %&amp;gt;&lt;br /&gt;
            &amp;lt;%= Html.ValidationMessage(&amp;quot;City&amp;quot;, &amp;quot;*&amp;quot;) %&amp;gt;&lt;br /&gt;
        &amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&lt;br /&gt;
            &amp;lt;label for=&amp;quot;State&amp;quot;&amp;gt;State:&amp;lt;/label&amp;gt;&lt;br /&gt;
            &amp;lt;%= Html.TextBox(&amp;quot;State&amp;quot;) %&amp;gt;&lt;br /&gt;
            &amp;lt;%= Html.ValidationMessage(&amp;quot;State&amp;quot;, &amp;quot;*&amp;quot;) %&amp;gt;&lt;br /&gt;
        &amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&lt;br /&gt;
            &amp;lt;label for=&amp;quot;Zipcode&amp;quot;&amp;gt;Zipcode:&amp;lt;/label&amp;gt;&lt;br /&gt;
            &amp;lt;%= Html.TextBox(&amp;quot;Zipcode&amp;quot;) %&amp;gt;&lt;br /&gt;
            &amp;lt;%= Html.ValidationMessage(&amp;quot;Zipcode&amp;quot;, &amp;quot;*&amp;quot;) %&amp;gt;&lt;br /&gt;
        &amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&lt;br /&gt;
            &amp;lt;label for=&amp;quot;Phone&amp;quot;&amp;gt;Phone:&amp;lt;/label&amp;gt;&lt;br /&gt;
            &amp;lt;%= Html.TextBox(&amp;quot;Phone&amp;quot;) %&amp;gt; Required&lt;br /&gt;
            &amp;lt;%= Html.ValidationMessage(&amp;quot;Phone&amp;quot;, &amp;quot;*&amp;quot;) %&amp;gt;&lt;br /&gt;
        &amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&lt;br /&gt;
            &amp;lt;label for=&amp;quot;Email&amp;quot;&amp;gt;Email:&amp;lt;/label&amp;gt;&lt;br /&gt;
            &amp;lt;%= Html.TextBox(&amp;quot;Email&amp;quot;) %&amp;gt; Required&lt;br /&gt;
            &amp;lt;%= Html.ValidationMessage(&amp;quot;Email&amp;quot;, &amp;quot;*&amp;quot;) %&amp;gt;&lt;br /&gt;
        &amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Create&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/fieldset&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;% } %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
    &amp;lt;%=Html.ActionLink(&amp;quot;Back to List&amp;quot;, &amp;quot;Index&amp;quot;) %&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 不同類型的輸出 ====&lt;br /&gt;
&lt;br /&gt;
每一個Controller中負責回應的方法，都會回傳一個ActionResult物件的資訊，ActionResult是一個執行結果物件的封裝體，當MvcHandler執行完指令接到ActionResult時，就會依照它的內容來輸出資料。目前MVC Framework支援的ActionResult有下列幾種：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ViewResult&amp;lt;/code&amp;gt;物件，這個物件內裝載了&amp;lt;code&amp;gt;IView&amp;lt;/code&amp;gt;介面的資訊，以及&amp;lt;code&amp;gt;IViewEngine&amp;lt;/code&amp;gt;的資訊，實際產生輸出資料的會是 IViewEngine，以及其指示的 View 物件。&lt;br /&gt;
* &amp;lt;code&amp;gt;PartialViewResult&amp;lt;/code&amp;gt;物件，與&amp;lt;code&amp;gt;ViewResult&amp;lt;/code&amp;gt;相似，但它回傳的是&amp;quot;部份展示&amp;quot;，即使用者控制項的View。&lt;br /&gt;
* &amp;lt;code&amp;gt;ContentResult&amp;lt;/code&amp;gt;物件，裝載由使用者自訂的 Content-Type 以及資料。&lt;br /&gt;
* &amp;lt;code&amp;gt;EmptyResult&amp;lt;/code&amp;gt;物件，表示不回傳任何東西。&lt;br /&gt;
* &amp;lt;code&amp;gt;HttpUnauthorizedReuslt&amp;lt;/code&amp;gt;物件，表示動作沒有被授權（即 HTTP 401）的錯誤訊息。&lt;br /&gt;
* &amp;lt;code&amp;gt;JavaScriptResult&amp;lt;/code&amp;gt;物件，表示回傳的是[[JavaScript]]指令碼。&lt;br /&gt;
* &amp;lt;code&amp;gt;JsonResult&amp;lt;/code&amp;gt;物件，表示回傳的是[[JSON]]資料。&lt;br /&gt;
* &amp;lt;code&amp;gt;FileResult&amp;lt;/code&amp;gt;物件，表示回傳的是一個檔案資料。&lt;br /&gt;
* &amp;lt;code&amp;gt;RedirectResult&amp;lt;/code&amp;gt;物件，表示回傳的是一個重導向 (HTTP Redirect) 指令。&lt;br /&gt;
* &amp;lt;code&amp;gt;RedirectToRouteResult&amp;lt;/code&amp;gt;物件，與 RedirectResult 類似，但是它是重導向給一個 Route 的路徑。&lt;br /&gt;
&lt;br /&gt;
透過多類型的ActionResult，開發人員可以自由決定要回傳的資料的類型與格式。&lt;br /&gt;
&lt;br /&gt;
== 應用 ==&lt;br /&gt;
&lt;br /&gt;
目前微軟有一個Oxite專案，是使用ASP.NET MVC Framework所開發的部落格引擎，而這個專案已經被微軟的部份應用平台所採用，像是MIX Online、PDC 2009、MIX Video等官方網站都採用它來開發&amp;lt;ref&amp;gt;{{Cite web |url=http://www.codeplex.com/oxite/Wiki/View.aspx?title=oxitesites&amp;amp;referringTitle=Home |title=Oxite Refers |accessdate=2009-08-31 |archive-date=2009-08-15 |archive-url=https://web.archive.org/web/20090815054245/http://www.codeplex.com/oxite/Wiki/View.aspx?title=oxitesites&amp;amp;referringTitle=Home |dead-url=no }}&amp;lt;/ref&amp;gt;。另外，stackoverflow.com以及codeplex.com這兩個網站也是採用ASP.NET MVC Framework。&lt;br /&gt;
&lt;br /&gt;
== 版本歷程 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ 版本历史&lt;br /&gt;
! 日期 !! 版本 !! 注释&lt;br /&gt;
|-&lt;br /&gt;
| 2007-12-10 || ASP.NET MVC Framework || 以CTP方式釋出&lt;br /&gt;
|-&lt;br /&gt;
| 2008-03-05 || ASP.NET MVC Preview 2 || 已釋出&lt;br /&gt;
|-&lt;br /&gt;
| 2008-05-01 || ASP.NET MVC Preview 3 || 已釋出&lt;br /&gt;
|-&lt;br /&gt;
| 2008-07-16 || ASP.NET MVC Preview 4 || 已釋出&amp;lt;ref&amp;gt;ASP.NET MVC Preview 4 Released - Shiju Varghese&amp;#039;s Blog&amp;lt;!-- Bot generated title --&amp;gt;. Retrieved from http://weblogs.asp.net/shijuvarghese/archive/2008/07/16/asp-net-mvc-preview-4-released.aspx {{Wayback|url=http://weblogs.asp.net/shijuvarghese/archive/2008/07/16/asp-net-mvc-preview-4-released.aspx |date=20090527071550 }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2008-08-28 || ASP.NET MVC Preview 5 || 已釋出&amp;lt;ref&amp;gt;ASP.NET MVC CodePlex Preview 5 Release Notes. Retrieved from http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=aspnet&amp;amp;ReleaseId=16775 {{Wayback|url=http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=aspnet&amp;amp;ReleaseId=16775 |date=20110927215643 }}.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2008-10-16 || ASP.NET MVC Beta || 已釋出&amp;lt;ref&amp;gt;http://go.microsoft.com/fwlink/?LinkID=129910&amp;amp;clcid=0x409{{Dead link|date=2019年12月 |bot=InternetArchiveBot |fix-attempted=yes }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2009-01-27 || ASP.NET MVC RC || 已釋出&amp;lt;ref&amp;gt;http://go.microsoft.com/fwlink/?LinkID=141184&amp;amp;clcid=0x409&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2009-03-03 || ASP.NET MVC RC 2 || 已釋出&amp;lt;ref&amp;gt;http://go.microsoft.com/fwlink/?LinkId=144443{{Dead link|date=2019年12月 |bot=InternetArchiveBot |fix-attempted=yes }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2009-03-17 || ASP.NET MVC 1.0 || 已釋出&amp;lt;ref&amp;gt;{{Cite web |url=http://go.microsoft.com/fwlink/?LinkId=144444 |title=存档副本 |access-date=2009-08-31 |archive-date=2012-05-30 |archive-url=https://archive.today/20120530222329/http://go.microsoft.com/fwlink/?LinkId=144444 |dead-url=yes }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2009-07-31 || ASP.NET MVC 2.0 Preview 1 || 已釋出&amp;lt;ref&amp;gt;http://go.microsoft.com/fwlink/?LinkID=154409{{Dead link|date=2019年12月 |bot=InternetArchiveBot |fix-attempted=yes }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2009-11-17 || ASP.NET MVC 2.0 Beta || 已釋出&amp;lt;ref&amp;gt;{{Cite web |url=http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=36054 |title=存档副本 |accessdate=2009-11-18 |archive-date=2009-11-21 |archive-url=https://web.archive.org/web/20091121015854/http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=36054 |dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2010-03-11 || ASP.NET MVC 2.0 RTM || 已釋出&amp;lt;ref&amp;gt;{{Cite web |url=http://weblogs.asp.net/scottgu/archive/2010/03/11/asp-net-mvc-2-released.aspx |title=存档副本 |accessdate=2010-04-02 |archive-date=2010-04-01 |archive-url=https://web.archive.org/web/20100401191833/http://weblogs.asp.net/scottgu/archive/2010/03/11/asp-net-mvc-2-released.aspx |dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2010-10-06 || ASP.NET MVC 3.0 Beta || 持續更新中&amp;lt;ref&amp;gt;{{Cite web |url=http://aspnet.codeplex.com/releases/view/54306 |title=存档副本 |accessdate=2010-11-24 |archive-date=2010-11-22 |archive-url=https://web.archive.org/web/20101122211052/http://aspnet.codeplex.com/releases/view/54306 |dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2010-11-08 || ASP.NET MVC 3.0 RC || 已釋出&amp;lt;ref&amp;gt;{{cite web |url=http://go.microsoft.com/fwlink/?LinkID=191797 |title=存档副本 |accessdate=2010-11-25 |deadurl=yes |archiveurl=https://archive.today/20120709122930/http://go.microsoft.com/fwlink/?LinkID=191797 |archivedate=2012-07-09 }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2011-01-13 || ASP.NET MVC 3.0 RTM || 已釋出&amp;lt;ref&amp;gt;{{Cite web |url=http://www.asp.net/mvc/mvc3 |title=存档副本 |accessdate=2011-01-19 |archive-date=2011-01-19 |archive-url=https://web.archive.org/web/20110119100313/http://www.asp.net/mvc/mvc3 |dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2011-09-20 || ASP.NET MVC 4.0 Developer Preview||已釋出&amp;lt;ref&amp;gt;{{Cite web |url=http://aspnet.codeplex.com/wikipage?title=ASP.NET%20MVC%204%20RoadMap |title=存档副本 |accessdate=2012-06-21 |archive-date=2012-05-29 |archive-url=https://web.archive.org/web/20120529165740/http://aspnet.codeplex.com/wikipage?title=asp.net%20mvc%204%20roadmap |dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2012-02-15 || ASP.NET MVC 4.0 Beta||隨著Microsoft .NET Framework 4.5 RC釋出&amp;lt;ref&amp;gt;{{Cite web |url=http://www.asp.net/whitepapers/mvc4-release-notes |title=存档副本 |accessdate=2012-06-21 |archive-date=2012-06-21 |archive-url=https://web.archive.org/web/20120621040018/http://www.asp.net/whitepapers/mvc4-release-notes |dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2012-05-31 || ASP.NET MVC 4.0 RC ||&amp;lt;ref name=&amp;quot;#1&amp;quot;&amp;gt;{{Cite web |url=http://www.asp.net/mvc/mvc4 |title=存档副本 |accessdate=2012-06-21 |archive-date=2012-06-19 |archive-url=https://web.archive.org/web/20120619115620/http://www.asp.net/mvc/mvc4 |dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2012-08-15 || ASP.NET MVC 4.0 ||&amp;lt;ref name=&amp;quot;#1&amp;quot;/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2013-10-17 || ASP.NET MVC 5.0 ||&amp;lt;ref&amp;gt;{{Cite web |url=http://www.nuget.org/packages/Microsoft.AspNet.Mvc/5.0.0 |title=存档副本 |accessdate=2014-02-05 |archive-date=2014-02-22 |archive-url=https://web.archive.org/web/20140222021520/http://www.nuget.org/packages/Microsoft.AspNet.Mvc/5.0.0 |dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2014-01-17 || ASP.NET MVC 5.1 ||&amp;lt;ref&amp;gt;{{Cite web |url=http://www.nuget.org/packages/Microsoft.AspNet.Mvc/5.1.0 |title=存档副本 |accessdate=2014-02-05 |archive-date=2014-02-22 |archive-url=https://web.archive.org/web/20140222021522/http://www.nuget.org/packages/Microsoft.AspNet.Mvc/5.1.0 |dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2014-2-10 || ASP.NET MVC 5.1.1 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2014-4-4 || ASP.NET MVC 5.1.2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2014-6-22 || ASP.NET MVC 5.1.3 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2014-7-1 || ASP.NET MVC 5.2 ||&amp;lt;ref&amp;gt;{{Cite web |url=http://www.nuget.org/packages/Microsoft.AspNet.Mvc/5.2.0 |title=存档副本 |accessdate=2016-02-16 |archive-date=2016-02-23 |archive-url=https://web.archive.org/web/20160223134251/http://www.nuget.org/packages/Microsoft.AspNet.Mvc/5.2.0 |dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| 2014-8-28 || ASP.NET MVC 5.2.2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2015-2-9 || ASP.NET MVC 5.2.3 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2018-2-12 || ASP.NET MVC 5.2.4  || &amp;lt;ref&amp;gt;{{cite web |url=https://blogs.msdn.microsoft.com/webdev/2018/02/12/announcing-asp-net-mvc-5-2-4-web-api-5-2-4-and-web-pages-3-2-4/ |title=Announcing ASP.NET MVC 5.2.4, Web API 5.2.4, and Web Pages 3.2.4 |date=12 February 2018 |publisher=Microsoft |access-date=14 March 2018 |archive-date=2019-01-23 |archive-url=https://web.archive.org/web/20190123191624/https://blogs.msdn.microsoft.com/webdev/2018/02/12/announcing-asp-net-mvc-5-2-4-web-api-5-2-4-and-web-pages-3-2-4/ |dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2018-5-2 || ASP.NET MVC 5.2.5 ||&amp;lt;ref&amp;gt;{{cite web |url=https://blogs.msdn.microsoft.com/webdev/2018/05/02/announcing-asp-net-mvc-5-2-5-web-api-5-2-5-and-web-pages-3-2-5/ |title=Announcing ASP.NET MVC 5.2.5, Web API 5.2.5, and Web Pages 3.2.5 |date=2 May 2018 |publisher=Microsoft |access-date=4 May 2018 |archive-date=2019-01-17 |archive-url=https://web.archive.org/web/20190117222229/https://blogs.msdn.microsoft.com/webdev/2018/05/02/announcing-asp-net-mvc-5-2-5-web-api-5-2-5-and-web-pages-3-2-5/ |dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2018-5-11 || ASP.NET MVC 5.2.6 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2018-11-29 || ASP.NET MVC 5.2.7 ||&lt;br /&gt;
|-&lt;br /&gt;
|2022-4-12 || ASP.NET MVC 5.2.8 (最新版) ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 授權 ==&lt;br /&gt;
&lt;br /&gt;
ASP.NET MVC Framework雖然是ASP.NET的一部份，不過它的原始碼是透過Microsoft Public License (MS-PL)的授權模式公開，因此在MS-PL授權的範圍內，任何人是可以去檢視與修改它的原始碼的。&amp;lt;ref&amp;gt;{{Cite web |url=http://weblogs.asp.net/scottgu/archive/2009/04/01/asp-net-mvc-1-0.aspx |title=ASP.NET MVC 1.0 on ScottGu blog |accessdate=2009-08-31 |archive-date=2012-03-26 |archive-url=https://www.webcitation.org/66RHj55Cd?url=http://weblogs.asp.net/scottgu/archive/2009/04/01/asp-net-mvc-1-0.aspx |dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ASP.NET MVC Razor Engine ==&lt;br /&gt;
&lt;br /&gt;
微軟在2010年7月2日由Scott Guthrie發表新的MVC繪製引擎 (Render Engine)：Razor Engine&amp;lt;ref&amp;gt;{{Cite web |url=http://weblogs.asp.net/scottgu/archive/2010/07/02/introducing-razor.aspx |title=Introducing “Razor” – a new view engine for ASP.NET |accessdate=2010-11-08 |archive-date=2010-11-10 |archive-url=https://web.archive.org/web/20101110065355/http://weblogs.asp.net/scottgu/archive/2010/07/02/introducing-razor.aspx |dead-url=no }}&amp;lt;/ref&amp;gt;，它已內建於 ASP.NET MVC 3.0 中發布，它具有下列功能：&lt;br /&gt;
&lt;br /&gt;
# 更輕量化且直覺的語法，減少在 View 中輸出資料時使用的語法，讓 View 的指令更加簡潔，例如使用 &amp;quot;@&amp;quot; + 變數名稱 的方式，就可以輸出程式中的變數，不必再用 &amp;lt;% %&amp;gt; 來設定。如果程式有多行，可以使用 @{ } 的方式來設定。 &lt;br /&gt;
# 容易學習。&lt;br /&gt;
# 可相容於現在的程式語言 (ex: C#)。&lt;br /&gt;
# 透過 Visual Studio，可享有 Intellisense 能力。&lt;br /&gt;
# 可混用 HTML 與程式語言指令。&lt;br /&gt;
# 可用各種不同的文字編輯器編輯。&lt;br /&gt;
# 具有單元測試的能力。&lt;br /&gt;
&lt;br /&gt;
== 參考資料 ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 外部網站 ==&lt;br /&gt;
* [http://www.asp.net/mvc ASP.NET MVC 官方網站]{{Wayback|url=http://www.asp.net/mvc |date=20090829085907 }}&lt;br /&gt;
* [http://msdn.microsoft.com/en-us/aa740364.aspx MSDN ASP.NET Virtual Labs]{{Wayback|url=http://msdn.microsoft.com/en-us/aa740364.aspx |date=20090831105004 }}&lt;br /&gt;
* [http://msdn.microsoft.com/en-us/library/dd394709.aspx ASP.NET MVC Documentations]{{Wayback|url=http://msdn.microsoft.com/en-us/library/dd394709.aspx |date=20090907064548 }}&lt;br /&gt;
&lt;br /&gt;
===View engines===&lt;br /&gt;
*[http://mvccontrib.codeplex.com/ MvcContrib]{{Wayback|url=http://mvccontrib.codeplex.com/ |date=20101126064140 }}&lt;br /&gt;
*[http://code.google.com/p/string-template-view-engine-mvc/ StringTemplate View Engine]{{Wayback|url=http://code.google.com/p/string-template-view-engine-mvc/ |date=20100814211922 }}&lt;br /&gt;
*[http://dev.dejardin.org/home Spark]{{Wayback|url=http://dev.dejardin.org/home |date=20101205144618 }}&lt;br /&gt;
*[http://ndjango.org/index.php?title=NDjango_Home NDjango]{{Wayback|url=http://ndjango.org/index.php?title=NDjango_Home |date=20101201235542 }}&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Naked_Objects_MVC Naked Objects MVC]{{Wayback|url=http://en.wikipedia.org/wiki/Naked_Objects_MVC |date=20100919111402 }}&lt;br /&gt;
*[http://weblogs.asp.net/scottgu/archive/2010/07/02/introducing-razor.aspx Razor]{{Wayback|url=http://weblogs.asp.net/scottgu/archive/2010/07/02/introducing-razor.aspx |date=20101110065355 }}（預計ASP.NET MVC 3.0導入）&lt;br /&gt;
&lt;br /&gt;
{{DotNET}}&lt;br /&gt;
{{Microsoft development tools}}&lt;br /&gt;
&lt;br /&gt;
[[Category:微軟開發工具]]&lt;br /&gt;
[[Category:ASP.NET]]&lt;br /&gt;
[[Category:MVC]]&lt;/div&gt;</summary>
		<author><name>imported&gt;InternetArchiveBot</name></author>
	</entry>
</feed>