public interface IView
{
void Render(ViewContext viewContext, TextWriter writer);
}
單一 Render 方法,輸入 ViewContext (含 ViewData、ViewBag、TempData、ClientValidationEnabled 等) 與輸出 TextWriter (實為 HttpResponse.Output)。
ViewData/ViewBag/TempData:來自 Controller 同名屬性。ClientValidationEnabled、UnobtrusiveJavaScriptEnabled:預設從 web.config appSettings 讀取,可被 HtmlHelper 靜態屬性或實例方法覆寫。<appSettings>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>
程式碼控制:HtmlHelper.ClientValidationEnabled、Html.EnableClientValidation()、Html.EnableUnobtrusiveJavaScript()。
| 引擎 | View 類別 | 檔案副檔名 |
|---|---|---|
| WebFormViewEngine (ASPX) | WebFormView | .aspx, .ascx |
| RazorViewEngine | RazorView | .cshtml, .vbhtml |
皆繼承 BuildManagerViewEngine → VirtualPathProviderViewEngine → IViewEngine。
ViewResult (或 PartialViewResult)。ViewResult.ExecuteResult 呼叫 FindView/FindPartialView 取得 ViewEngineResult。IView 執行 view.Render(viewContext, writer)。viewEngine.ReleaseView 釋放。ViewEngines.Engines 集合順序決定嘗試順序。預設:RazorViewEngine 優先於 WebFormViewEngine。可自訂順序或清空註冊單一引擎。
ViewLocationFormats、PartialViewLocationFormats、MasterLocationFormats 定義路徑模板。{0} (ViewName)、{1} (ControllerName)、{2} (AreaName)。MVC View 呈現架構以 IView 為核心契約,ViewEngine 負責尋找/建構 View,ViewResult 協調執行流程。ViewContext 傳遞執行所需上下文。理解此分層設計可自訂引擎、修改搜尋慣例或整合第三方模板引擎。