为ASP.Net MVC 2创建RESTful按钮

时间:2010-12-23 04:06:03

标签: c# asp.net-mvc-2 http-headers

我正在尝试使用C#和ASP.Net实现一个RESTful MVC项目,因此我有一个控制器,其方法可以通过请求类型区分,就像这个简单的例子一样:

[HttpGet, ActionName("Instance")]
public ActionResult Get(string id) {
    //Get
}

[HttpPut, ActionName("Instance")]
public ActionResult Update(string id, Instance instance) {
    //Update
}

[HttpDelete, ActionName("Instance")]
public ActionResult Delete(string id) {
    //Delete
}

在视图上,我想显示实例,并有更新和删除按钮,这将调用上面的相应操作。创建这些按钮的最佳方法是什么,以便它们生成具有适当请求类型的请求?

2 个答案:

答案 0 :(得分:3)

这应该有所帮助: http://blog.osbornm.com/archive/2009/11/24/overriding-the-http-verb-in-asp.net-mvc-2.aspx

此外,对于DELETE操作(您只需要Id),您可以使用不同的小表单并使用html帮助程序的HttpMethodOverride方法。见http://geekswithblogs.net/michelotti/archive/2010/01/08/implementing-a-delete-link-with-mvc-2-and-httpmethodoverride.aspx

答案 1 :(得分:3)

<%: Html.ActionLink("Get button", "Instance", new { id = "123" }) %>

<% using (Html.BeginForm("Instance", "ControllerName", new { id = "123" }, FormMethod.Post)) %>
    <%: Html.HttpMethodOverride(HttpVerbs.Put) %>
    <%: Html.TextBoxFor(x => x.Prop1) %>
    <%: Html.TextBoxFor(x => x.Prop2) %>
    <input type="submit" value="Put button" />
<% } %>

<% using (Html.BeginForm("Instance", "ControllerName", new { id = "123" }, FormMethod.Post)) %>
    <%: Html.HttpMethodOverride(HttpVerbs.Delete) %>
    <input type="submit" value="Delete button" />
<% } %>