0

我正在关注本教程:

http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/cs/examineing-the-edit-methods-and-edit-view

它描述了当用户单击按钮然后调用没有属性的函数时的情况。

但是当添加一个带有 HttpPost 属性的函数时,调用的是这个函数而不是没有该属性的函数。

该按钮启动 Html.BeginForm() 创建一个发布请求。那么为什么没有该属性的函数会被调用呢?

4

2 回答 2

4

提交按钮将始终发起HttpPost请求。

另一方面,一个超链接(a标签),指向一个动作总是一个HttpGet.

编辑:我意识到您的困惑,请参见下文以演示@RickAndMSFT 想说的内容:

鉴于我们有以下操作方法:

[HttpGet]
public ActionResult SearchIndex()
{
}

此操作将仅接受HttpGet请求

注意:如果我们去掉该HttpGet属性,它将接受ALL Request Types

因此,如果您有:

public ActionResult SearchIndex()
{
}

不需要 post 方法,因为上面的方法已经接受了 post 请求。之所以如此,是因为相关页面实际上并没有修改/保存/创建任何内容,它只是列出数据。

于 2012-10-21T20:34:37.000 回答
4

感谢您阅读我的教程。您可能想阅读MVC 4 版本。正如@mattytommo 所写,提交会导致POST。在本教程的后面部分,您将使用 BeginForm 重载路由以提交到 GET 方法。ASP.NET MVC 模式使用与 POST 或 GET 相同的方法名称。获取请求转到 HTTPGET 方法(默认,不需要 [HttpGet] 属性)并提交转到 [HttpPost] 方法。查看所有的编辑/创建方法——通常是相同的方法名称。由于不能在属性上重载 C#,所以当参数相同时,我们使用另一个属性来更改方法名称(见教程末尾)。

于 2012-10-22T06:44:53.810 回答