区分具有相同签名的 GET/POST 操作方法的最佳 ASP.NET MVC 实践?
在实现编辑操作时,我为 Get 和 Post 添加了两种方法: Edit(string id)
理想情况下,它们需要具有相同的签名。但这当然是不可编译的。因此,我向 HttpPost 方法添加了一个虚拟参数(在我的例子中为 form):
[HttpGet]
public ActionResult Edit(string id)
{
var user = Entities.Users.SingleOrDefault(s => s.UserID == id);
return View(user);
}
[HttpPost]
public ActionResult Edit(string id, FormCollection form)
{
var user = Entities.Users.SingleOrDefault(s => s.UserID == id);
if (TryUpdateModel<User>(user, new[] { "Email", "FullName" }))
{
Entities.SaveChanges();
RedirectToAction("Index");
}
return View(user);
}
有更好/更干净的方法来实现编辑操作吗?
When implementing Edit action, I add two methods for Get and Post: Edit(string id)
Ideally, they need have same signature. But of course this is not compilable. So I add a dummy parameter to HttpPost method (form in my case):
[HttpGet]
public ActionResult Edit(string id)
{
var user = Entities.Users.SingleOrDefault(s => s.UserID == id);
return View(user);
}
[HttpPost]
public ActionResult Edit(string id, FormCollection form)
{
var user = Entities.Users.SingleOrDefault(s => s.UserID == id);
if (TryUpdateModel<User>(user, new[] { "Email", "FullName" }))
{
Entities.SaveChanges();
RedirectToAction("Index");
}
return View(user);
}
Any better/cleaner way to implement Edit action?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
在控制器中为方法指定一个唯一的名称,例如添加“_POST”作为后缀。然后,您可以使用
[ActionName("actualname")]
属性用您的操作使用的名称来标记您的方法。Give the methods a unique name in the controller e.g. add "_POST" as a suffix. You can then use the
[ActionName("actualname")]
attribute to mark you method with the name your action use.我会把它们合二为一:
I would combine them into one:
帖子应该在 IMO 模型中具有 id:
The Post should have the id in a Model IMO:
为什么不呢
?
这将导致适当的方法处理适当的 HTTP 请求
Why not
and
This will cause the appropriate HTTP request to be handled by the proper method