html.ActionLink (): ViewController перестает работать, если добавлен класс Attribute - PullRequest
0 голосов
/ 30 мая 2018

Я столкнулся с очень странным поведением в моем проекте сегодня.Поэтому я работаю над веб-сайтом, на котором у администратора есть общий вид пользователя.Страницы хранятся в папке с именем «Admin» и в папке «User» в папке «Views»

Я начал настраивать только функции для страниц Admin, поэтому я так и не понял, что мой UserController не сделал этого.т работа.Он всегда перенаправлял меня к Admin / Somepage вместо User / Somepage.

После некоторого тестирования я обнаружил следующую проблему:

Если я использую

@Html.ActionLink("Admin", "AdminHome", "Admin")
@Html.ActionLink("User", "UserHome", "User")

все работает просто отлично.

Но как только я добавляю класс к ссылке, например

@Html.ActionLink("User", "UserHome", "User", new { class= "someClass" })

, он перестает работать.Теперь, когда я нажимаю ссылку на домашнюю страницу пользователя, она перенаправляется на Admin / UserHome вместо User / UserHome и, очевидно, не может найти страницу.

Почему это?Кто-нибудь когда-либо испытывал это?

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

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Вы используете неправильную перегрузку.Используя это:

@Html.ActionLink("User", "UserHome", "User", new { class= "someClass" })

ASP.Net MVC считает, что четвертый параметр - это значения маршрута , что не так.

Чтобы заставить его работать должным образом, вам нужно использовать эту перегрузку, которая принимает пять параметров и установить атрибуты на пятой позиции, как показано ниже:

@Html.ActionLink("User", "UserHome", "User", null, new { class= "someClass" })

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

0 голосов
/ 30 мая 2018

Поскольку, как указал Стивен Мюке в своем комментарии, вы должны использовать метод ActionLink(HtmlHelper, String, String, String, Object, Object) со следующей подписью:

public static MvcHtmlString ActionLink(
    this HtmlHelper htmlHelper,
    string linkText,
    string actionName,
    string controllerName,
    object routeValues,
    object htmlAttributes
)

@Html.ActionLink(linkText, actionName, controllerName, routeValues, htmlAttributes)

там, где вы в данный момент используете ActionLink(HtmlHelper, String, String, Object, Object) со следующей подписью:

public static MvcHtmlString ActionLink(
    this HtmlHelper htmlHelper,
    string linkText,
    string actionName,
    object routeValues, // here you passed controllerName ("User") instead
    object htmlAttributes
)

@Html.ActionLink(linkText, actionName, routeValues, htmlAttributes)
...