您好,登錄后才能下訂單哦!
MVC3中,使用Razor模板引擎的話,會自動生成一個_ViewStart.cshtml文件。
很多人把這個文件當成類似Webform中的Master模板文件,其實這個_ViewStart.cshtml文件和模板文件沒有任何關系,要說有關系,也僅僅是默認生成的時候,里面有一個語句
Layout = "~/Views/Shared/_Layout.cshtml";
其實這句話才是和模板有點關系的。
事實上,_Viewstart.cshtml的作用是在呈現View文件的時候的啟動文件,無論哪個視圖,當你要呈現這個視圖的之前,_Viewstart.cshtml中的代碼總會被先執行,正如把它的名字命名為_Viewstart哪樣,這是Razor引擎故意設計的,因此如果項目中所有的視圖都要包含某些公共邏輯,比如設置Layout = "~/Views/Shared/_Layout.cshtml";這樣的語句,只需在_Viewstart.cshtml寫一遍就可以了。
注意,是在View被呈現的時候才會調用_Viewstart.cshtml,如果一個View是按照PartialView的方式輸出的,則不會觸發_Viewstart.cshtml中的代碼。
舉個例子。
假設在_Viewstart.cshtml中有如下代碼:
- @{
- Layout = "~/Views/Shared/_Layout.cshtml";
- @Html.Raw("Hello")
- }
- <div>World</div>
--------------------------------------
訪問Home/ViewUserControl1調用的Action方法如下:
- public ActionResult ViewUserControl1()
- {
- return View();
- }
此方法返回ViewUserControl1視圖。注意:當View方法參數為空的時候,默認是使用當前的action名字,即會去找ViewUserControl1.cshtml的View。
如果方法改為如下:
- public ActionResult ViewUserControl1()
- {
- return PartialView();
- }
則_Viewstart.cshtml中的代碼不會被執行,因此寫的Layout = "~/Views/Shared/_Layout.cshtml";之類的代碼也不會被執行,返回的就是單純的一個Partial View。
如果在View的Home目錄下也有一個同名的_ViewStart.cshtml文件,那么這個_ViewStart也會被調用,但是會最先調用的還是最外面的_ViewStart,然后再是Home目錄下的_ViewStart。
例如:Home目錄下的_ViewStart.cshtml文件內容為:
- @{
- @Html.Raw("<b>_ViewStart.cshtml in home</b>");
- }
則當呈現ViewUserControl1得到的結果如下:
至于_ViewStart.cshtml為何前面要加'_'符號,可以參考文章http://cnn237111.blog.51cto.com/2359144/814704
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。