1. 程式人生 > >理解ASP.NET MVC底層執行機制

理解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