_ViewStart.cshtml 在 ASP.NET MVC 就存在了,而 ASP.NET Core MVC 則多了一個 _ViewImports.cshtml,這兩個都會對 View 有全域性的影響,重新來了解一下 _ViewStart.cshtml 及新多的 _ViewImports.cshtml 的作用。
_ViewStart.cshtml
_ViewStart.cshtml 顧名思義,就是在 View 開始執行之前執行,而且是每一個 View,預設 ASP.NET Core MVC 專案開起來之後,就有產生一個 /Views/_ViewStart.cshtml
,其內容為:
@{
Layout = "_Layout";
}
意思就是每一個 View 的 Layout 預設是 _Layout,所以我們有任何要在 View 執行之前執行的程式碼,可以放在 _ViewStart.chstml 裡面,而且不同的 Controller、不同的 Area,可以為其增加 _ViewStart.cshtml,假定我新增了一個 /Views/Home/_ViewStart.cshtml,內容如下:
@{
ViewData["MemberName"] = "Johnny";
}
當我瀏覽 /Home/Index 的時候,_ViewStart.cshtml 的執行順序是先執行 /Views/_ViewStart.cshtml,接著執行 /Views/Home/_ViewStart.cshtml,而我的 ViewData 就多了 MemberName 的內容。
_ViewImports.cshtml
_ViewImports.cshtml 是放一些要引用的命名空間,預設的 ASP.NET Core MVC 專案就有一個 /Views/_ViewImports.cshtml
,其內容為:
@using [Project Namespace]
@using [Project Namespace].Models
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
之後的每一個 View 就不用再引用這些命名空間,與 _ViewStart.cshtml 一樣,可以為不同的 Controller、不同的 Area 增加 _ViewImports.cshtml,假定我新增了一個 /Views/Home/_ViewImports.chtml,其內容如下:
@using System.IO
@using System.Text
在 HomeController 的 View 就可以直接使用 System.IO 及 System.Text 命名空間底下的 API,而不用 using 這兩個命名空間。
以上是 _ViewStart.cshtml 及 _ViewImports.cshtml 的作用,分享給各位朋友參考。