項目創建步驟如下:
第1步:創建新項目->ASP.NET Core Web 應用程序
第2步:配置新項目,項目名稱 "AuthManagement"
第3步:創建新的ASP.NET Core Web 應用程序(這里的.net core版本選5.0)。
項目建好后在解決方案管理器中把目錄展開是這樣的:
和WEB API項目相比,可以看到
(1)多了wwwroot的文件夾(一般用於存放css、js、image等文件)和一些 .cshtml和.cshtml.cs文件。
(2)圖中的Pages文件夾就是來存放Razor頁面文件的(在訪問Razor頁面的時候不需要將Pages作為路徑的一部分)。
(3)Shared文件夾放一些通用的頁面或布局頁,一般以_開頭來命名(名稱以"_"開頭的頁面在瀏覽器中不可訪問),
此外,Shared文件夾下的文件被其他頁面引用的時候是不需要加"Shared"這個路徑的。
項目建好后,我們不改動任何文件,直接運行項目,可以得到如下頁面:
可以看到,頁面中的Home和Privacy這2個超鏈接對應解決方案中Pages文件夾下的Index.cshtml和Privacy.cshtml這兩個Razor頁面,
每個可訪問的Razor頁面都有一個對應的.cs文件用於編碼(在MVC框架中是用Controller來作為頁面對應的代碼文件的),
即頁面和代碼分離,這樣的好處是頁面/代碼都很清晰,維護起來更容易。
打開Index.cshtml文件,其代碼如下:
這里的代碼很簡單,似乎和頁面呈現的內容不能完全對應,其代碼只對應了紅圈標識的部分:
這是因為該頁面引用了Shared文件夾下的布局頁"_Layout.cshtml",所有頁面通用的部分在布局頁中先定義好,
引用的頁面只需要關注自身要展示的內容即可。
其中,
(1)@page 表示這個頁面是可以被訪問的,即在瀏覽器中輸入指向該頁面的路徑時能被正常顯示,沒有@page指令的.cshtml頁面不能被直接訪問。
(2)@model IndexModel表示這個頁面對應的Model是IndexModel,Model是頁面和代碼文件進行數據交換的載體,
一個.cshtml頁面中只能有1條@model指令。
(3)@{
ViewData["Title"] = "Home page";
}
的作用是給ViewData["Title"]賦值,即頁面的Title ,我們在瀏覽頁面的時候可以看到如下:
因為Index.cshtml使用了布局文件,打開Shared文件夾下的布局文件_Layout.cshtml,可以看到對應的頁面代碼:
如果我們不想顯示" - AuthManagement"這一段,只要在布局文件中去掉就可以了。
================================================================
另外,Razor框架的Pages文件夾下還約定了_ViewImports.cshtml和_ViewStart.cshtml這兩個文件,其中的代碼分別如下:
_ViewImports.cshtml
@using AuthManagement
@namespace AuthManagement.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
_ViewStart.cshtml
@{ Layout = "_Layout"; }
_ViewImports.cshtml用於給每個頁面導入通用的指令信息,如果某個頁面的指令不是通用的,在那個頁面中單獨導入就可以了。
_ViewStart.cshtml用來指定Razor頁面要套用的布局文件,如果后續項目升級后換了一種風格,只需要改一下這個頁面就可以了,
非常方便,默認情況下,在Pages文件夾下新增的每個Razor頁面都會受到_ViewStart.cshtml的作用(即自動使用布局頁),
如果不想使用布局頁,只要在當前頁面加入如下一行代碼就可以了(見紅色部分)
@page @model IndexModel @{ Layout = null; ViewData["Title"] = "Home page"; }
再次瀏覽頁面,效果如下:
當然,如果不使用布局頁,我們還需要在頁面中將<html><head><body>等一個標准html文件中的標簽進行補齊。