我正在关注本教程:
它描述了当用户单击按钮然后调用没有属性的函数时的情况。
但是当添加一个带有 HttpPost 属性的函数时,调用的是这个函数而不是没有该属性的函数。
该按钮启动 Html.BeginForm() 创建一个发布请求。那么为什么没有该属性的函数会被调用呢?
我正在关注本教程:
它描述了当用户单击按钮然后调用没有属性的函数时的情况。
但是当添加一个带有 HttpPost 属性的函数时,调用的是这个函数而不是没有该属性的函数。
该按钮启动 Html.BeginForm() 创建一个发布请求。那么为什么没有该属性的函数会被调用呢?
提交按钮将始终发起HttpPost
请求。
另一方面,一个超链接(a
标签),指向一个动作总是一个HttpGet
.
编辑:我意识到您的困惑,请参见下文以演示@RickAndMSFT 想说的内容:
鉴于我们有以下操作方法:
[HttpGet]
public ActionResult SearchIndex()
{
}
此操作将仅接受HttpGet
请求
注意:如果我们去掉该HttpGet
属性,它将接受ALL Request Types。
因此,如果您有:
public ActionResult SearchIndex()
{
}
不需要 post 方法,因为上面的方法已经接受了 post 请求。之所以如此,是因为相关页面实际上并没有修改/保存/创建任何内容,它只是列出数据。
感谢您阅读我的教程。您可能想阅读MVC 4 版本。正如@mattytommo 所写,提交会导致POST。在本教程的后面部分,您将使用 BeginForm 重载路由以提交到 GET 方法。ASP.NET MVC 模式使用与 POST 或 GET 相同的方法名称。获取请求转到 HTTPGET 方法(默认,不需要 [HttpGet] 属性)并提交转到 [HttpPost] 方法。查看所有的编辑/创建方法——通常是相同的方法名称。由于不能在属性上重载 C#,所以当参数相同时,我们使用另一个属性来更改方法名称(见教程末尾)。