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

问题描述 投票:0回答:1

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

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();
    }

    [...]
}
asp.net asp.net-mvc razor
1个回答
0
投票

您应该使用以下语法

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

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

© www.soinside.com 2019 - 2024. All rights reserved.