2010-11-20 106 views

回答

7

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

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

它会自动调用POST index动作:

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

,或者你可以使用jQuery发送Ajax请求,并指定要发布:

$.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) { 
    } 
}); 
+0

我可以有一个操作来处​​理GET和POST吗?或者我需要两个操作 – user514494 2010-11-20 15:34:56

+0

是的,你可以有一个单一的行动。无论客户使用了什么动词,都会调用此动作。 – 2010-11-20 15:37:06

2

这个属性添加到您的操作方法:

[HttpPost] 
+0

这将防止GET请求工作。他要求POST和GET。 – rboarman 2010-11-20 18:29:31

+0

@rboarman:呃,我看不到他要求的那个。 – Tahbaza 2010-11-23 12:59:45

+0

@rboarman:哦,我明白了 - 你的意思是在他的评论中发布到我的答案后的另一个问题?那么,我不是千里眼。 – Tahbaza 2010-11-23 13:01:08

0

只需确保在ASPX,你的处理操作方法是一动作形式POST,你很好去:

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

ActionName是将处理POST的方法。

还是我误解了这个问题?