我們知道可以將代碼和模型放在.cshtml文件里面或與.cshtml匹配的.cshtml.cs文件中。
Razor頁面處理程序或處理方法將用戶請求匹配到我們的方法,請求來自.cshtml文件。
Razor頁面遵循特定的命名約定。例如下面這些:
- OnGet
- OnPost
- OnGetAsync
- OnPostAsync
- OnPostStudent
從上面的例子中我們可以看到該命名都是以"On"開頭,然后跟上它的請求方式,其次是可選的Handler名稱,最后以Async結尾表示它是異步。
默認的請求處理方法:
默認的post請求,如果不指定action,它會找OnPost()方法。如果有,則調用對應的方法,沒有的話將不觸發任何方法。
<form method="post"> <input type="text" /> </form>
public void OnPost() { }
如果您同時實現OnPost()和OnPostAsync,則會出現以下錯誤:
如果我們的頁面有多個post請求,例如下面:
public void Post() { } public void PostFirst() { }
我們可以采用給form表單添加asp-page-handler屬性來自定義請求處理方法:
<form method="post" asp-page-handler="First"> <input type="text" /> </form>
上面的請求將請求PostFirst()方法,因為該方法的Handler和表單對應的屬性對應。
處理方法參數
將參數傳遞給處理方法有兩種方法:
- 表單輸入
- 表單元素借助asp-route Tag Helper
通過表單輸入傳遞參數:
<form method="post"> <input type="text" name="name"/> </form>
public void OnPost(string name) { }
通過路由傳遞參數:
第一個請求將請求OnPost方法並給參數name賦值為666。
第二個請求將請求OnPostRemove方法,並給參數id賦值為1。
<form method="post" asp-route-name="666"> </form> <form method="post" asp-route-handler="Remove" asp-route-id="1"> </form>
public void OnPost(string name) { } public void OnPostRemove(int id) { }