ASP.NET MVC 是微軟官方提供的 MVC 模式 Web 框架,不取代 WebForms,提供另一種開發選擇。核心優勢:關注點分離、高擴充性、強大路由、相容既有 ASP.NET 技術、開源。適用於:複雜專案維護、TDD、團隊協作、需精細控制 HTML 的場景。
| 版本 | 年份 | 關鍵特性 |
|---|---|---|
| MVC 1 | 2009/03 | 首版、缺 Area 等關鍵功能 |
| MVC 2 | 2010/04 | 強型別 Helper、驗證、Area、非同步 Controller、.NET 4 新語法 |
| MVC 3 | 2011 | Razor 引擎、全域過濾器、ViewBag、新 ActionResult、Model 驗證、JSON 繫結、DI/IoC、NuGet |
| 場景 | ASPX (WebForms) | Razor (MVC 3+) |
|---|---|---|
| 程式碼區塊 | <% int x=1; %> | @{ int x=1; } |
| 輸出編碼 | <%: Model.Msg %> | @Model.Msg |
| 輸出未編碼 | <%= Model.Msg %> | @Html.Raw(Model.Msg) |
| 迴圈+標記 | <%foreach(var p in products){%><li><%=p.Name%></li><%}%> | @foreach(var p in products){ <li>@p.Name</li> } |
| 純文字混合 | <%if(foo){%>Text<%}%> | @if(foo){ <text>Text</text> } 或 @:Text |
| 註解 | <%-- 註解 --%> | @* 註解 *@ |
| Email 自動識別 | 需轉義 | user@domain.com 直接顯示 |
@if(cond){ @:Hello }<span>ISBN@(isbnNumber)</span> 避免識別模糊。Func<dynamic, object> b = @<strong>@item</strong>; @b("Bold") 復用片段。@(MyClass.Method<T>())
// _Layout.cshtml
<body>
<header>...</header>
@RenderBody()
@RenderSection("Scripts", required: false)
<footer>...</footer>
</body>
// 內容頁
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
@section Scripts {
<script src="~/js/page.js"></script>
}
// _ViewStart.cshtml (自動套用 Layout)
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
MVC 3+ 允許同時註冊 ASPX、Razor、Spark、NHaml、NDjango 等引擎,專案可漸進式遷移。
Telerik 開源 Razor Converter,支援批次轉換,節省人工修改成本。
ASP.NET MVC 以「關注點分離、可測試、可擴充、HTML 完全控制」四大核心價值,成為 .NET Web 開發主流選擇。Razor 引擎以簡潔、流暢、智慧型別推斷的語法,大幅提升視圖開發體驗。掌握 Layout/Section/_ViewStart 版面機制、多引擎共存與自動化遷移工具,能讓團隊在維舊與新專案間遊刃有餘。