C# 如何重定向到MVC3中的同一控制器操作?
在我的ASP.NET MVC 3应用程序中,我需要重定向到具有某些特定参数的同一控制器操作对。我用这个:C# 如何重定向到MVC3中的同一控制器操作?,c#,asp.net,.net,asp.net-mvc-3,redirect,C#,Asp.net,.net,Asp.net Mvc 3,Redirect,在我的ASP.NET MVC 3应用程序中,我需要重定向到具有某些特定参数的同一控制器操作对。我用这个: return RedirectToAction((String)RouteData.Values["action"], new { param1 = value1, param2 = value2 } ); 它是有效的,但当我想重用它时,我必须随身携带这段相当不雅的代码 我当然可以设计一个助手之类的东西,但我希望框架中有现成的东西 是否有更优雅、更易于重用的方法来实现这一点?您可以
return RedirectToAction((String)RouteData.Values["action"],
new { param1 = value1, param2 = value2 } );
它是有效的,但当我想重用它时,我必须随身携带这段相当不雅的代码
我当然可以设计一个助手之类的东西,但我希望框架中有现成的东西
是否有更优雅、更易于重用的方法来实现这一点?您可以使用来自的强类型
重定向操作。我一直在ASP.NET MVC中使用它,我对它非常满意
public ActionResult RedirectActionOnSameController()
{
return this.RedirectToAction(c => c.Index());
}
您只需将null
作为操作名称传递:
return RedirectToAction(null, new { param1 = value1, param2 = value2 } );
在内部,RedirectToAction
正在调用RouteValueShellers.MergeRouteValues()
helper方法,该方法将尝试将新路由值(包括操作)与控制器初始化时已可用的现有路由数据合并。因此,如果action
为null,则MergeRouteValues
将按照您的意愿返回当前操作
您可能希望用更明确的结构来替换null
,以清楚地表达您的意图:
private const string SAME_ACTION = null;
// then
return RedirectToAction(SAME_ACTION, new { param1 = value1, param2 = value2 } );
请参见(第512行)和(第49行)