ASP.NET MVC Framework

技術

在ASP.NET MVC架構中，除了Controller、Model與View三個主要部份以外，還包含了許多技術以讓這三層得以整合並互動運作。

Controller

Controller在ASP.NET MVC應用程式中是負責中控的角色，也是來自用戶端HTTP要求的處理核心，因此有許多處理與轉向HTTP要求的輔助技術在Controller層次都會使用到。

ASP.NET 路由技術

用來過濾用戶端要求的URL，並藉由定義好的路由表(route table)將要求導向至正確的MVC Controller，並呼叫Controller中的Execute方法執行，而Execute方法會將HTTP動作以及實際執行的指令交給正確的函式來執行。而通常一個MVC應用程式的URL都會是類似這樣的URL格式：
http://127.0.0.1/ControllerName/ActionName/ActionParameters
而MvcRouteHandler會拆解URL，找出目標的Controller，並且將ActionName以及ActionParameters傳給Controller中負責的函式（以ActionName來指定）。例如下列的URL會傳遞給BlogController的GetList方法：
http://127.0.0.1/Blog/GetList

將資料模型與展示層直接包裝

ViewPage、ViewMasterPage、ViewUserControl等展示物件都支援泛型物件，可以直接裝載Model資料傳遞至前端輸出，可簡化處理Model與View之間整合的動作，只要一個參數就可以將資料傳給View：
public ActionResult GetList(){
    return View(BlogDataModel);}
    Function GetList() As ActionResult
        Return View(BlogDataModel)
    End Function

Model

在 ASP.NET MVC 中，Model 相對不設限，可以使用內建的資料結構以及自訂的資料類別，也可以是一個商業物件，因此 Model 的彈性相當大，除了前述的資料結構外，微軟新發展的一些資料存取方式也可以應用在 Model 中，像是ADO.NET Entity Framework與LINQ to SQL等技術。
另外，MVC在伺服端資料驗證中，提供了ViewDataDictionary類別，這個類別中有一個ModelState屬性，內含了ModelStateDictionary類別，開發人員可以利用這個類別來控制資料驗證的結果，而View中輸出驗證訊息的部份會和此類別有關聯，例如下列的程式：
[AcceptVerbs(HttpVerbs.Post)]public ActionResult Create(Person person){
    if (person.Name.Trim().Length == 0)
    {
        ModelState.AddModelError("Name", "Name is required.");
    }
    if (person.Age < 1 || person.Age > 200)
    {
        ModelState.AddModelError("Age", "Age must be within range 1 to 200.");
    }
    if ((person.Zipcode.Trim().Length > 0) && (!Regex.IsMatch(person.Zipcode, @"^\d{5}$|^\d{5}-\d{4}$")))
    {
        ModelState.AddModelError("Zipcode", "Zipcode is invalid.");
    }
    if (!Regex.IsMatch(person.Phone, @"((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}"))
    {
        ModelState.AddModelError("Phone", "Phone number is invalid.");
    }
    if (!Regex.IsMatch(person.Email, @"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$"))
    {
        ModelState.AddModelError("Email", "Email format is invalid.");
    }
    if (!ModelState.IsValid)
    {
        return View("Create", person);
    }

    people.Add(person);

    return RedirectToAction("Index");}
在 ASP.NET MVC 2.0 中，新增了一個可以直接讓 MVC Framework 針對資料欄位進行驗證控制的模型，稱為 Model Validation，它融合了在 .NET Framework 3.5 SP1 發表的 ASP.NET Dynamic Data Framework 中 Data Annotations (資料記號) 的特性，讓開發人員可以只利用標記的方式來執行驗證，或是利用自訂的程式碼來擴充資料記號的驗證行為。
using System.ComponentModel.DataAnnotations;  
namespace MvcDA {    [MetadataType(typeof(ProductMD))]
    public partial class Product {
        public class ProductMD {            [StringLength(50),Required]
            public object Name { get; set; }            [StringLength(15)]
            public object Color { get; set; }            [Range(0, 9999)]
            public object Weight { get; set; }
          //  public object NoSuchProperty { get; set; }
        }
    }}

View

由於View是直接呈現給使用者，因此與使用者互動的部份都要由此層處理，包含資料的輸出以及以用戶端操作為主的回應（例如指令碼）等。

HTML 工具類別

HTML工具類別在View中是很重要的輸出工具，它內建了輔助產生HTML標籤的工具方法，多數的HTML語法都可以利用它來產生，包含像連結(<a>)、表單(<form>)以及表單控制項等等。HTML工具是以HtmlHelper類別為核心，並配合System.Web.Mvc.Html命名空間的方法，以延伸方法(Extension Method)的方式，讓產生HTML的程式就有如呼叫方法般簡單：
<h2>Index</h2><table>
    <tr>
        <th></th>
        <th>
            Id
        </th>
        <th>
            Name
        </th>
    </tr><% foreach (var person in Model) { %>

    <tr>
        <td>
            <%= Html.ActionLink("Details", "Details", person )%>
        </td>
        <td>
            <%= Html.Encode(person.Id) %>
        </td>
        <td>
            <%= Html.Encode(person.Name) %>
        </td>
    </tr><% } %></table><p>
    <%= Html.ActionLink("Create New", "Create") %></p>

資料驗證

View的HTML工具可以配合Model處理資料驗證的結果，在ASP.NET中常用的ValidationSummary在這裡也支援，而且MVC的架構讓驗證資訊的輸出也更加彈性：
<h2>Create</h2><%= Html.ValidationSummary("Create was unsuccessful. Please correct the errors and try again.") %><% using (Html.BeginForm()) {%>

    <fieldset>
        <legend>Fields</legend>
        <p>
            <label for="Name">Name:</label>
            <%= Html.TextBox("Name") %> Required
            <%= Html.ValidationMessage("Name", "*") %>
        </p>
        <p>
            <label for="Age">Age:</label>
            <%= Html.TextBox("Age") %> Required
            <%= Html.ValidationMessage("Age", "*") %>
        </p>
        <p>
            <label for="Street">Street:</label>
            <%= Html.TextBox("Street") %>
            <%= Html.ValidationMessage("Street", "*") %>
        </p>
        <p>
            <label for="City">City:</label>
            <%= Html.TextBox("City") %>
            <%= Html.ValidationMessage("City", "*") %>
        </p>
        <p>
            <label for="State">State:</label>
            <%= Html.TextBox("State") %>
            <%= Html.ValidationMessage("State", "*") %>
        </p>
        <p>
            <label for="Zipcode">Zipcode:</label>
            <%= Html.TextBox("Zipcode") %>
            <%= Html.ValidationMessage("Zipcode", "*") %>
        </p>
        <p>
            <label for="Phone">Phone:</label>
            <%= Html.TextBox("Phone") %> Required
            <%= Html.ValidationMessage("Phone", "*") %>
        </p>
        <p>
            <label for="Email">Email:</label>
            <%= Html.TextBox("Email") %> Required
            <%= Html.ValidationMessage("Email", "*") %>
        </p>
        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset><% } %><div>
    <%=Html.ActionLink("Back to List", "Index") %></div>

應用

目前微軟有一個Oxite專案，是使用ASP.NET MVC Framework所開發的部落格引擎，而這個專案已經被微軟的部份應用平台所採用，像是MIX Online、PDC 2009、MIX Video等官方網站都採用它來開發。另外，stackoverflow.com以及codeplex.com這兩個網站也是採用ASP.NET MVC Framework。

授權

ASP.NET MVC Framework雖然是ASP.NET的一部份，不過它的原始碼是透過Microsoft Public License (MS-PL)的授權模式公開，因此在MS-PL授權的範圍內，任何人是可以去檢視與修改它的原始碼的。