布局視圖和我們在Asp.Net MVC一樣,布局視圖_Layout.cshtml使得所有視圖保持一致的外觀變得更加容易,因為我們只有一個要修改的布局視圖文件,更改后將立即反映在整個應用程序的所有視圖中。
在 ASP.NET Core MVC 中,有一些視圖文件,如布局的視圖,_ViewStart.cshtml 和_ViewImports.cshtml 等其他.cshtml 文件的文件名以下划線開頭,這些文件名中的前下划線表示這些文件不是直接面向瀏覽器。
我們可以在單個應用程序中包含多個布局視圖文件。比如一個布局視圖文件服務為管理員用戶,另外一個不同的布局視圖文件服務於普通用戶。
我們一般將布局視圖建在Views/Shared文件夾下,以_Layout.cshtml命名。
<!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>@ViewBag.Title</title> </head> <body> <div> <!--@RenderBody()是注入視圖特定內容的位置。例如,如果使用此布局視圖呈現 index.chtml 視圖,則會在我們 調用@RenderBody()方法 的位置注入 index.cshtml 視圖內容 。--> @RenderBody() </div> @*@if (IsSectionDefined("Scripts")) { @RenderSection("Scripts"); }*@ @RenderSection("Scripts", false); </body> </html>
我們可以在Views/_ViewStart.cshtml指定啟用哪個布局頁,因為請求的時候會先找到_ViewStart.cshtml。
@{ Layout = "_Layout"; } @if (User.IsInRole("Admin")) { Layout = "_AdminLayout"; } else { Layout = "_NoAdminLayout"; }
同時,如果我們在很多頁面都使用同一個命名空間,同一個model的話,我們可以在Views/_ViewImports.cshtml文件中添加共用的命名空間,model。
@using StudentManagement.Models; @using StudentManagement.ViewModels; @*還支持以下指令*@ @* @addTagHelper @removeTagHelper @tagHelperPrefix @model @inherits @inject *@
需要注意的是,_ViewStart和_ViewImports是支持分層的,除了將它放在 Views 文件夾中之外,我們還可以在 Views 文件夾的“Home”子文件夾中放置另一個_ViewImports,在文件 Home 的文件夾中的\_ViewImports
將覆蓋在 Shared 文件夾中的\_ViewImports
文件指定的設置。