Сохранение имени контроллера по умолчанию в URL в MVC5 - PullRequest
0 голосов
/ 27 апреля 2018

Как пользователь I метода FormExtensions.BeginForm () я столкнулся с неудовлетворительным поведением метода UrlHelper.GenerateUrl ().

При стандартной маршрутизации:

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

Следующий вызов метода возвращает "/"

 //Request.RawUrl == "/Home"
 UrlHelper.GenerateUrl(
            routeName: null,
            actionName: null,
            controllerName: null,
            routeValues: null,
            routeCollection: RouteTable.Routes,
            requestContext: Request.RequestContext,
            includeImplicitMvcValues: true
         );

Однако, если домашний контроллер не установлен по умолчанию в маршрутизации, приведенный выше вызов метода возвращает «/ Home», что является моим желаемым поведением.

Установка параметров метода actionName = "Index" и controllerName = "Home" не помогает.

Что я должен сделать, чтобы получить URL, содержащий имя контроллера? ( "/ Home")

1 Ответ

0 голосов
/ 27 апреля 2018

Вы можете добавить дополнительное определение маршрута до маршрута по умолчанию

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

Обратите внимание, что необязательный сегмент {id} не требуется, поскольку, если бы он был предоставлен, тогда имя контроллера и действия были бы включены в URL.

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