Asp.Net core Razor页面的请求方法

我们知道可以将代码和模型放在.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)
{

}

 

posted @ 2017-11-14 18:17  御坂美琴1106  阅读(2566)  评论(1编辑  收藏  举报