asp.net core中的razor頁面
Razor 頁面(Razor Pages)是 ASP.NET Core 2.0 中新增的一種Web頁面模型,相對MVC形式更加簡單易用,可以說是一個服務端的MVVM模型,本文簡單的介紹一下它的用法。
參考文件:ofollow,noindex" target="_blank">https://docs.microsoft.com/zh-cn/aspnet/core/razor-pages/
配置
首先配置Startup類,新增MVC支援
public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddMvc(); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseMvc(); } }
編寫Razor頁面
Razor頁面依然是cshtml,它通常在Pages資料夾下,要求以@page 開頭作為標記。相對Razor檢視更為簡單,無需通過控制器處理。
@page <h1>Hello, world!</h1> <h2>The time on the server is @DateTime.Now</h2>
Razor頁面也是支援Razor語法的。模型繫結 、標記幫助程式 和 HTML 幫助程式均只可用於 Razor 頁面類中定義的屬性
訪問路徑
頁面的 URL 路徑的關聯由頁面在檔案系統中的位置決定:
-
預設情況下,執行時在"Pages"資料夾中查詢 Razor 頁面檔案。
-
URL 未包含頁面時,Index 為預設頁面
如下是基本示例:
檔名和路徑 |
匹配的 URL |
/Pages/Index.cshtml |
/ 或 /Index |
/Pages/Contact.cshtml |
/Contact |
/Pages/Store/Contact.cshtml |
/Store/Contact |
/Pages/Store/Index.cshtml |
/Store 或 /Store/Index |
繫結模型
Razor頁面支援模型繫結,以實現動態頁面功能。通過@model指令繫結模型。
@page @model WebApplication2.Pages.HomeModel @{ Layout = null; } <h3>@Model.Request.Host</h3>
模型類繼承自PageModel類,需要實現一個OnGet函式,在請求頁面會呼叫。
public class HomeModel : PageModel { public void OnGet() { } }
同樣,它也支援其它幾種Http操作的響應。
-
OnGet / OnGetAsync
-
OnPost / OnPostAsync
-
OnDelete / OnDeleteAsync
Url引數
對於頁面"Home.cshtml",預設的頁面是"/Home",它本身是可以支援帶查詢引數的Url的,如"/Home?id=32&name=abc"。要獲取這些引數,可以在Model的Request.Query 屬性獲取。
也可以直接在OnGet中新增引數
public void OnGet ( string name, int id)
url解析時候可以直接對映到引數中,不匹配的引數會以預設值代替。
路由
如果要將url對映成"/Home/{name}/{id}"的形式,可以在@page指令中新增引數。
@page "{name}/{id}"
此時就可以接受"/Home/abc/32"這樣的路由了,可以通過Model的RouteData.Values 獲取引數。
也可以直接在OnGet中新增引數,Url解析後直接對映到引數,不匹配的引數會賦預設值。
釋出
釋出的時候需要新增MvcRazorCompileOnPublish,否則不會發布cshtml
<
PropertyGroup
>
<
MvcRazorCompileOnPublish
>
false
</
MvcRazorCompileOnPublish
>
</PropertyGroup
相關文件