Url.Action()没有使用良好的路由配置

时间:2019-03-04 11:12:57

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

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

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,则会显示OverriddenAction中的替代动作MyOverriddenController。可以。

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

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

我的控制器:

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


public class MyController : Controller
{

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

    [...]
}

1 个答案:

答案 0 :(得分:0)

您应该使用以下语法

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

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