承接上一章,我們這章來玩玩看Razor Page下表單傳遞資料並做Model Binding看看,從上一章我們知道,Razor Page只有Page這個類別,並有類似Webform的CodeBehind,我們馬上來試試看吧!
Model Binding
在此之前,先來引入Tag Helper吧!我們先在_ViewImports.cshtml中引入Tag Helper以便之後專案都可以使用!不過這邊我們建議_ViewImports.cshtml放在Pages資料夾內。
_ViewImports.cshtml引入addTagHelper
@namespace Test.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
cshtml
接著,引入完之後我們使用Tag Helper,接著,我們把textbox給submit到後端試試看,記得Razor Page第一行要寫@page宣告
@page
@model TestModel
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Test</title>
</head>
<body>
<h1>Test</h1>
<form method="post">
<input asp-for="Hello" />
<input type="submit" />
</form>
</body>
</html>
cs(Page Model)
這邊要注意,為了要Binding property,我們必須在Hello寫上[BindProperty]這個Attribute才可以成功!可參考下方程式。
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace Test.Pages
{
public class TestModel : PageModel
{
[BindProperty]
public string Hello { get; set; }
public void OnGet()
{
}
public void OnPost()
{
string str = string.Empty;
str = $"Hi {Hello}";
}
}
}
非常簡單就可以在前端submit後,後端OnPost接收到Hello(BindProperty)這個textbox的內容。
使用Layout
介紹完Model Binding後,我們來引入Layout,這個在前面的MVC章節有介紹過,概念很類似,Layout就是確保整個網站有一個一致的樣子,共用的前端函式庫(js、css)也可以放在這裡面,不過有一點要注意,因為以前MVC還有Views\Shared資料夾,這邊沒有,所以我們就放在Pages資料夾底下了。
我們開始新增Layout吧!在Pages資料夾->新增->Layout
一樣要呼叫@RenderBody方法來載入其他頁面。
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>@ViewBag.Title</title>
</head>
<body>
<h1>Razor Page Layout</h1>
<div>
@RenderBody()
</div>
</body>
</html>
Layout的設定就完成了,是不是非常簡單呢!
參考資料
https://docs.microsoft.com/zh-tw/aspnet/core/tutorials/razor-pages/search?view=aspnetcore-3.1