【问题标题】:Url.Action() does not use good route configUrl.Action() 没有使用好的路由配置
【发布时间】:2019-03-04 11:12:56
【问题描述】:

我在路由配置中覆盖了默认路由:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.MapRoute("MyController_OverriddenAction",
             "MyController/OverriddenAction",
             new { controller = "MyOverriddenController", action = "OverridenAction" },
             new[] { "Plugin" }
        );


        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

如果我调用MyController/OverriddenAction,则会显示MyOverriddenController 中覆盖的操作OverriddenAction。它有效。

但是如果我调用@Html.Action("OverriddenAction", "MyController"),则会调用默认路由。

为什么?解决办法是什么?

我的控制器:

public class MyOverridenController : Controller
{
    public ActionResult OverriddenAction()
    {
        return Content("overridden");
    }
}


public class MyController : Controller
{

    public ActionResult OverriddenAction()
    {
        return new EmptyResult();
    }

    [...]
}

【问题讨论】:

  • 请在此处添加您的 MyController
  • 我已经编辑了我的原始帖子

标签: asp.net asp.net-mvc razor


【解决方案1】:

你应该使用以下语法

 @Html.Action("OverriddenAction", "MyOverriden")

在像MyController/OverriddenAction 这样直接调用方法时,它会在 MapRoute 中查找条目。但是,在使用@Html.Action 时,您应该使用实际的控制器名称。

【讨论】:

  • 我无法使用此解决方案,因为覆盖的控制器是通过插件导入的(如 maproute 配置)
  • 我不明白这种行为。为什么这个助手不使用路由?如果调用的操作在不同的控制器中,问题也是一样的......
猜你喜欢
  • 1970-01-01
  • 2014-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-16
  • 1970-01-01
相关资源
最近更新 更多