如何在MVC3中重定向到相同的控制器操作?

时间:2015-03-16 10:32:42

标签: c# asp.net .net asp.net-mvc-3 redirect

在我的ASP.NET MVC 3应用程序中,我需要使用一些特定参数重定向到相同的控制器 - 操作对。我用这个:

return RedirectToAction((String)RouteData.Values["action"],
    new { param1 = value1, param2 = value2 } );

并且它可以工作,但是当我想重用它时,我必须携带这个相当不优雅的代码。

我当然可以制作一个帮手或其他东西,但我希望在框架中有一些准备好的东西。

是否可能有一些更优雅和重复使用的方式来做同样的事情?

2 个答案:

答案 0 :(得分:1)

您只需将null作为操作名称传递:

return RedirectToAction(null, new { param1 = value1, param2 = value2 } );

在内部,RedirectToAction正在调用RouteValuesHelpers.MergeRouteValues()辅助方法,该方法将尝试将新路由值(包括操作)与控制器初始化时已有的现有路由数据合并。因此,如果action为空,MergeRouteValues将根据您的意愿返回当前操作。

您可能希望将null替换为更明确表达您意图的更明确的构造:

private const string SAME_ACTION = null;
// then
return RedirectToAction(SAME_ACTION, new { param1 = value1, param2 = value2 } );

请参阅Controller.cs(第512行)和RouteValuesHelpers.cs(第49行)

答案 1 :(得分:0)

您可以使用MvcContrib中的强类型RedirectToAction。我一直在使用ASP.NET MVC,我很满意。

public ActionResult RedirectActionOnSameController()
{
    return this.RedirectToAction(c => c.Index());
}