Url.Action () не использует хорошую конфигурацию маршрута - PullRequest
0 голосов
/ 04 марта 2019

Я переопределил маршрут по умолчанию в своей конфигурации маршрутов:

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 голосов
/ 04 марта 2019

Вы должны использовать следующий синтаксис

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

при вызове метода напрямую, как MyController/OverriddenAction, он ищет запись в MapRoute.Однако при использовании @Html.Action вы должны использовать фактическое имя контроллера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...