C# 如何重定向到MVC3中的同一控制器操作?

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 } ); 它是有效的,但当我想重用它时,我必须随身携带这段相当不雅的代码 我当然可以设计一个助手之类的东西,但我希望框架中有现成的东西 是否有更优雅、更易于重用的方法来实现这一点?您可以

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

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行)