【问题标题】:How do I redirect to the same controller-action in MVC3?如何重定向到 MVC3 中的相同控制器操作?
【发布时间】:2015-05-18 10:28:34
【问题描述】:

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

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

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

我当然可以制作一个助手或其他东西,但我希望框架中已经准备好了一些东西。

是否有更优雅、更易于重复使用的方法来做同样的事情?

【问题讨论】:

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


    【解决方案1】:

    您可以使用来自MvcContrib 的强类型RedirectToAction。我一直在使用它与 ASP.NET MVC 并对此非常满意。

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

    【讨论】:

      【解决方案2】:

      您可以简单地将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行)

      【讨论】:

        猜你喜欢
        • 2011-08-06
        • 1970-01-01
        • 2012-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多