您無法檢測客戶端是否支持這些動詞。對於不支持HTML格式中的PUT
和DELETE
動詞的瀏覽器,您可以在表單中使用HttpMethodOverride幫助程序,該幫助程序將向表單添加隱藏字段,該隱藏字段將指示運行時調用適當的控制器操作,儘管在封面一個POST
請求被髮送。
<% using (Html.BeginForm("Destroy", "Products", new { id = "123" }, FormMethod.Post)) { %>
<%: Html.HttpMethodOverride(HttpVerbs.Delete) %>
<input type="submit" value="Delete" />
<% } %>
它將調用飾[HttpDelete]
動作:
[HttpDelete]
public ActionResult Destroy(int id)
{
// TODO: delete product
TempData["message"] = "product deleted";
return RedirectToAction("index");
}
這裏最重要的是,控制器不應該關心或依靠什麼動詞客戶端支持。如果您使用正確的動詞和名稱以REST風格設計控制器,則會出現如下所示的技術,允許不支持PUT
和DELETE
動詞的客戶端仍然調用這些操作。
但是,Ajax請求呢? – 2010-10-10 16:01:23
他們呢? AJAX請求支持PUT和DELETE動詞,所以你不需要額外的隱藏字段。它們將根據您使用的HTTP動詞自動發送到適當的控制器操作:$ .ajax({url:'/ products/destroy/123',type:'DELETE',success:function(result){alert ('product deleted');}});' – 2010-10-10 16:02:35
爲什麼ajax請求支持PUT和DELETE,而普通表單請求不支持? – 2010-10-10 16:11:06