如果这是重复的,请告诉我 - 因为我快速浏览了一下,找不到任何真正回答我问题的东西。
我正在试验 ASP.NET MVC 2。现在来自 Web 窗体背景,我只真正处理了HTTP GET和HTTP POST。
我正在尝试查看如何将GET/PUT/POST/DELETE应用于我的存储库上的相应CRUD操作(查找、插入、更新、删除)。
假设我有一个控制器,具有以下操作方法:
[HttpGet] // GET: /Products/{id}
[ActionName("Products")
public ActionResult Get(int id = 0) { ... }
[HttpPut] // PUT: /Products
[ActionName("Products")
public ActionResult Put(Product product) { ... }
[HttpPost] // POST: /Products/{product}
[ActionName("Products")
public ActionResult Post(Product product) { ... }
[HttpDelete] // DELETE: /Products/{product}
[ActionName("Products")
public ActionResult Delete(Product product) { .. }
对此有几个问题 - 您将如何命名/分隔操作方法?我应该通过整个模型(产品),还是只通过 id?
我遇到的问题是我不确定如何处理在我的视图中使用相关 HTTP 动词调用这些操作方法。
在这个阶段,我想我会有 3 个视图:
- “索引” - 绑定到
IEnumerable<Product>
模型,列出所有产品,带有“编辑”、“详细信息”和“删除”链接 - “ Single ” - 绑定到单个
Product
模型,列出产品的所有详细信息,并带有“更新”按钮。 - “新建” - 绑定到单个
Product
模型,带有用于创建产品的表单,带有“创建”按钮。
所以 - 我的问题是,我如何指定我想用特定的 HTTP 动词调用特定的控制器方法?
使用Html.BeginForm
,您可以指定一个FormMethod
枚举 - 但它只有 GET 和 POST。
- 如何执行 PUT 和 DELETE 命令?
- 我需要为每个 HTTP 动词提供单独的视图吗?
- 如果我有一个名为“Delete”的链接,我可以向我的控制器调用 HTTP DELETE 命令,还是需要使用表单操作删除将其重定向到新视图?
或者,这首先是一个愚蠢/矫枉过正的设计,我应该坚持使用“GET”和“POST”吗?
我对这种 Web 开发 (REST) 风格(相当)陌生,所以请善待。:)
更新
所以我看到了 Stephen Walther 写的这篇关于这个话题的有趣文章。
他指出 HTML 表单仅支持 GET 和 POST(因为我是 REST 风格的 Web 开发新手,我什至不知道这一点,对此我感到有些羞愧)。
显然,使用 PUT/DELETE 调用控制器操作的唯一方法是使用 AJAX。严重地?
那么我应该在这里做什么,我应该坚持使用 GET/POST,还是应该创建一个 JavaScript 文件,将底层 XmlHttpRequest 代码包装在一个不错的函数后面?
ASP.NET MVC 开发人员倾向于哪种方式?肯定有人问过自己同样的问题。