HtmlHelper. ActionLink всегда устанавливает текущий контроллер вместо передачи другого контроллера - PullRequest
1 голос
/ 21 июня 2020

Я использую класс HtmlHelper, в котором я использовал некоторый код, и я установил его для своего макета Navbar как меню.

 public static MvcHtmlString MenuLink(this HtmlHelper helper,string text, string action, string controller)
        {
            var routeData = helper.ViewContext.RouteData.Values;
            var currentController = routeData["controller"];
            var currentAction = routeData["action"];

            if (String.Equals(controller, currentController as string, StringComparison.OrdinalIgnoreCase))
            {
                return new MvcHtmlString("<li class=\"nav-item active\">" + helper.ActionLink(text, action, controller, new { @class="nav-link" }) + "</li>");
            }
            return new MvcHtmlString("<li class=\"nav-item\">" + helper.ActionLink(text, action, controller, new { @class = "nav-link" }) + "</li>");
        }

И я установил свое меню, как показано ниже на странице макета:

 @Html.MenuLink("Search", "Search", "Home")

Теперь, когда я запускаю приложение, оно сначала загружает страницу входа, где путь входа: Account / Login

Теперь в меню поиска, когда я нахожу это меню тогда я обнаружил, что этот URL-адрес меню также установлен как Account / Search? Length = 4.

Но я пропустил контроллер «Home» для этого меню.

Я отлаживаю вспомогательный класс html код и обнаружил, что он устанавливает правильное действие и контроллер, который передается из макета.

Не знаю, где изменить этот URL.

Пожалуйста, предложите.

1 Ответ

2 голосов
/ 24 июня 2020

Используйте следующий код:

 public static MvcHtmlString MenuLink(this HtmlHelper helper,string text, string action, string controller)
        {
            var routeData = helper.ViewContext.RouteData.Values;
            var currentController = routeData["controller"];
            var currentAction = routeData["action"];

            if (String.Equals(controller, currentController as string, StringComparison.OrdinalIgnoreCase))
            {
                return new MvcHtmlString("<li class=\"nav-item active\">" + helper.ActionLink(text, action, controller,null, new { @class="nav-link" }) + "</li>");
            }
            return new MvcHtmlString("<li class=\"nav-item\">" + helper.ActionLink(text, action, controller,null, new { @class = "nav-link" }) + "</li>");
        }

Когда вы используете

helper.ActionLink(text, action, controller,new { @class="nav-link" })

, тогда он относится к текущему контроллеру, потому что вы не указали routeValue, поэтому, когда вы хотите перенаправить с одного контроллера к другому, тогда укажите значение маршрута как null, если нет значения маршрута для метода перенаправления.

Итак, используйте helper.ActionLink(text, action, controller,null, new { @class="nav-link" })

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