这两个场景中的哪一个是ASP.NET MVC中的最佳实践?
1张贴自我
在视图中使用
using (Html.BeginForm) {
...
}
在控制器中你有
[HttpGet]
public ActionResult Edit(int id)
[HttpPost]
public ActionResult Edit(EditModel model)
2从编辑发布到保存
在视图中使用
using (Html.BeginForm("Save", "ControllerName")) {
在控制器中你有
[HttpGet]
public ActionResult Edit(int id)
[HttpPost]
public ActionResult Save(EditModel model)
摘要
我可以看到每一个的好处,前者给你一个更宁静的风格,同一个地址与正确的HTTP动词(GET,POST,PUT,DELETE等)一起使用。后者有一个URL模式,使每个地址都非常具体。
这是正确的方法吗?
答案 0 :(得分:4)
对于RESTful控制器:
// return an HTML form for editing a specific entity
public ActionResult Edit(int id) { }
// find and update a specific entity
[HttpPut]
public ActionResult Update(EditModel userView) { }
在视图中:
<% using (Html.BeginForm<HomeController>(c => c.Update(null))) {%>
<%: Html.HttpMethodOverride(HttpVerbs.Put) %>
<%: Html.EditorForModel() %>
<input type="submit" value="Save" />
<% } %>
答案 1 :(得分:3)
发布相同的动作。
否则,如果在“保存”中验证失败,则需要重定向到“编辑”。您必须在Tempdata中存储错误消息并从中重新填充ModelState。
答案 2 :(得分:0)
我更喜欢使用编辑/更新,因为我认为它可以更清楚地了解操作的内容。 Stephen Walther some good suggestions for standard action names使用该惯例。
我不认为它真的很重要但我会说在所有控制器中保持一致更为重要。
作为旁注,如果REST是您的要求,那么我相信以下内容更适用于RESTfull应用程序:
[HttpGet]
public ActionResult Customer(int id) {
//return customer details
}
[HttpPut]
public ActionResult Customer(Customer cust) {
//update customer
}
[HttpPost]
public ActionResult Customer(Customer cust) {
//insert new customer
}
如果不需要REST,那么我将使用编辑/更新约定