本文實例分析了ASP.NET MVC中的視圖生成過程。。具體如下:
在 ASP.NET MVC 中,我們將前端的呈現劃分為三個獨立的部分來實現,Controller 用來控制用戶的操作,View 用來控制呈現的內容,Model 用來表示處理的數據。
從控制器到視圖
通常,在 Controller 中,我們定義多個 Action ,每個 Action 的返回類型一般是 ActionResult,在 Action 處理的最后,我們返回對于視圖的調用。
代碼如下:public ActionResult Index()
{
return this.View();
}
默認情況下,將會調用與 Action 同名的視圖,比如,在上面的 Action 中,將會使用名為 Index 的視圖。
如果我們傳遞了一個字符串參數,那么,這個字符串就回被視為視圖的名稱,例如,我們希望使用名為 IndexView 的視圖進行呈現,那么,可以如下完成。
代碼如下:public ActionResult Index()
{
return this.View("IndexView");
}
布局與視圖
MVC 會直接去找我們的視圖嗎?不會!
從 Action 返回之后,首先,MVC 會在 Views 文件夾下查看是否存在一個名為 _ViewStart.cshtml 的特殊文件,如果存在的話,就回執行這個文件。
默認情況下,這個文件的內容如下所示:
代碼如下:@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
也就是說,它設置了我們的默認布局使用那一個文件文件。
布局等價于我們在 WebForm 中所使用的母版頁。
如果沒有這個文件,默認沒有使用布局。
如果有了這個文件,而我們在頁面中不想使用這個布局怎么辦呢?很簡單,在頁面中設置 Layout = null 來覆蓋掉它。
代碼如下:@{
Layout = null;
}
布局中的分區
在布局頁面中,默認就回存在一個特殊的指令 @RenderBody(),這是說,你在內容頁面中呈現的內容,將會在這里進行輸出。這就是在使用布局之后,你會發現你的視圖中已經沒有了 <html> 標記的原因。
代碼如下:<body>
@RenderBody()
</body>
假如說,我們希望在布局中的多個位置進行輸出,比如,樣式表通常在 <head> 標記中,而現代的腳本則會出現在頁面的最后,頁面的內容當然出現在頁面的主體中了。這樣的話,我們在內容頁面的實際內容,將會需要在布局的不同部分進行呈現,而不是在同一個位置進行呈現了。
解決的辦法就是分區,實際上,類似于 WebForm 中的 ContentPlaceHolder ,定義一個命名的區域。
比如,下面我們定義了一個名為 scripts 的命名區域,第二個參數表示這個區域是可選的區域,在內容頁面中可以不用提供內容。
新聞熱點
疑難解答
圖片精選