在我的ASP.NET MVC 3应用程序中,我需要使用一些特定参数重定向到相同的控制器 - 操作对。我用这个:
return RedirectToAction((String)RouteData.Values["action"],
new { param1 = value1, param2 = value2 } );
并且它可以工作,但是当我想重用它时,我必须携带这个相当不优雅的代码。
我当然可以制作一个帮手或其他东西,但我希望在框架中有一些准备好的东西。
是否可能有一些更优雅和重复使用的方式来做同样的事情?
答案 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());
}