如何在控制器中处理POST请求

时间:2010-11-20 15:29:03

标签: asp.net-mvc asp.net-mvc-2

似乎默认是GET,hwo来处理POST和其他Http操作?

3 个答案:

答案 0 :(得分:7)

当您发送POST请求时,框架将自动调用POST操作。例如,如果你有一个HTML表单:

<% using (Html.BeginForm("Index", "Home", FormMethod.Post)) {%>
    <input type="submit" value="OK" />
<% } %>

它将自动调用POST索引操作:

[HttpPost]
public ActionResult Index()
{
    ...
}

或者您可以使用jquery发送AJAX请求并指定要POST:

$.post('/home/index', function(result) {
    alert('successfully invoked the POST index action');
});

就其他动词而言,如PUT和DELETE,只有AJAX调用才支持。您无法在HTML表单中指定它。虽然有一个解决方法。以下表格:

<% using (Html.BeginForm("Destroy", "Home", FormMethod.Post)) {%>
    <%= Html.HttpMethodOverride(HttpVerbs.Delete) %>
    <input type="submit" value="OK" />
<% } %>

将调用此操作:

[HttpDelete]
public ActionResult Destroy() {}

这种方式的工作方式是使用POST动词,但是随请求一起发送一个额外的隐藏字段,允许引擎路由到正确的控制器动作。如果你使用AJAX,那么你可以直接指定你想要的动词:

$.ajax({
    url: '/home/destroy',
    type: 'DELETE',
    success: function(result) {
    }
});

答案 1 :(得分:2)

将此属性添加到您的操作方法:

[HttpPost]

答案 2 :(得分:0)

只需在aspx中确保您的处理操作方法是表单POST的操作,您就可以了:

using(Html.BeginForm("ActionName", "ControllerName") {}

ActionName是处理POST的方法。

或者我误解了这个问题?