我目前正在开发一个MVC C#应用程序并拥有一个HttpPost ActionResult,它为用户添加了一个新角色。我希望在整个应用程序中使用此方法。
我遇到的问题是,一旦此方法运行,我希望它返回到之前的ActionResult,因为我想重用此方法,我无法将返回视图设置为set视图。有没有办法将返回设置为上一个视图?
非常感谢
安德鲁
答案 0 :(得分:3)
您可以在调用POST控制器操作时传递returnUrl:
[HttpPost]
public ActionResult Foo(string returnUrl)
{
.... do something
return Redirect(returnUrl);
}
通过这种方式,您可以从应用程序的不同部分对此控制器操作进行POST操作,并且每次您提供要在完成处理后重定向到的返回URL。例如,默认模板中的LogOn操作如何工作。你可以看看它。
答案 1 :(得分:1)
默认情况下,它会返回与操作同名的视图,而不是表单提交的视图。
如果您想要返回特定视图,则可以执行以下操作:
return View("ViewName",Model);
如果要返回提交表单的视图,则需要告诉它所来自的操作,因此您可以向视图中设置的viewmodel添加属性。然后你可以这样做:
return View(ViewModel.ViewName,ViewModel);
你可以通过从请求对象中挖掘viewname来做一些令人讨厌的事情,但这太可怕了,我甚至不会告诉你从哪里开始。
答案 2 :(得分:0)
您可以创建ActionFilter
,使用Cookie存储当前路线值。它会在OnActionExecuting
中加载以前保存的Cookie,并将当前路由valeus存储在OnActionExecuted
中。但是对于已禁用cookie的每个人来说都会失败。
您还可以使用HTTP标头Referrer。但它并不是一直都在设定。
换句话说,没有可靠的方法来实现你想要的(不使用Darin所描述的参数)。至少不是一种值得麻烦的方式。