是否更好的做法是回发到同一控制器进行渲染并在必要时从原始控制器重定向?或者,如果从视图中跳转到不同的控制器,它是否相同?
答案 0 :(得分:3)
我在控制器中创建了两个重载动作,一个使用HTTP GET呈现输入表单,另一个使用HTTP POST处理表单发布。像这样:
public ViewResult Foo()
{
return View();
}
[AcceptVerbs(HttpVerbs.Post)]
public ViewResult Foo( FormCollection form )
{
// process input
if (inputOK)
return RedirectToAction("Index");
return View();
}
以这种方式执行此操作的好处是,如果出现错误,则会使用任何错误和验证消息重新呈现视图。如果成功,则会重定向到另一个操作,如果用户刷新页面,则会避免在浏览器上出现重复发布警告 - 请参阅Post/Redirect/Get on Wikipedia和此blog entry by Stephen Walther。
有一些替代方法可以选择FormCollection,例如:简单参数列表或绑定到对象。请参阅此article by ScottGu。
答案 1 :(得分:2)
我认为正在调用的操作应该包含在该操作的相关控制器中。如果视图需要调用该操作,则应该从相关控制器调用它,而不一定是从它生成的控制器。
如果您有库存控制器,即使库存屏幕上可能有管理操作,您也不希望定义与管理相关的操作,作为示例。