理解ASP.NET MVC底層執行機制
ASP.NET MVC有三大元件(即模型、檢視、控制器)。所謂模型,就是MVC需要提供的資料來源,負責資料的訪問和維護。所謂檢視,就是用於顯示模型中資料的使用者介面。所謂控制器,就是用來處理使用者的輸入,負責改變模型的狀態並選擇適當的檢視來顯示模型的資料。以下是我繪製的MVC三大元件之間的互動圖。
從互動圖中可以看出,MVC從使用者傳送請求到頁面呈現結果大致經過了五個步驟,分別為:
(1). 使用者在瀏覽器輸入地址,向頁面傳送請求(實則是向控制器發出相關命令);
(2). 控制器接受命令後,向模型請求獲得相關的資料;
(3). 模型將相應的資料返回給控制器;
(4). 控制器將相關資料傳送到指定的檢視;
(5). 指定的檢視呈現相關的資料。
從介面中可以看出,Mcirosoft已經約定了一套規範的目錄結構,主要功能如下:
Content:尋訪CSS、圖片等靜態資原始檔;
Controllers:存放一系列以***Controllers命名的控制器元件,執行與模型和檢視的互動(一般業務會提取到業務邏輯層中);
Models:存放Linq To SQL或ADO.NET Data Entity Model等模型元件,也可存放有關的資料操作等(一般提取到資料訪問層中),或者是檢視層中需要使用的Model模型;
Scripts:存放系統需要的JavaScript檔案;
Views:存放與Controllers在與方法對應的檢視,注意:如果存在***Controllers控制器,在Views中就必然會對映一個***命名的資料夾。在Views之下的Shared則存放檢視元件的公共部分,如.master、樣式表等。
此外,Global.asax實現MVC的URL的路由控制,可以在其中的RegisterRoutes()中設定預設的路由,以下是Global.asax的具體路由程式碼。
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
//自定義View
ViewEngines.Engines.Clear();
ExtendedRazorViewEngine engine = new ExtendedRazorViewEngine();
engine.AddPartialViewLocationFormat("~/Areas/Common/Views/Shared/{0}.cshtml");
ViewEngines.Engines.Add(engine);
//設定MEF依賴注入容器
MefConfig.RegisterMef();
//Model去除前後空格
ModelBinders.Binders.DefaultBinder = new TrimModelBinder();
}
}
當MVC在.net framework3.5中執行時,還需要在web.config中的httpModules配置節中註冊UrlRoutingModule類,用於解析URL路由,這正是MVC與傳統的ASP.NET應用程式的根本區別。
<httpModules>
<add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" />
</httpModules>
原文:http://www.cnblogs.com/hmiinyu/archive/2012/05/25/2517730.html