Сегодня я столкнулся с очень странным поведением в своем проекте. Итак, я работаю над веб-сайтом, на котором администратор видит общий пользовательский вид. Страницы хранятся в папке с именем «Admin» и папке с именем «User» в папке «Views».
Я начал настраивать функциональность только для страниц администратора, поэтому никогда не осознавал, что мой UserController не работает. Он всегда направлял меня на Администратор / Somepage вместо User / Somepage.
После некоторого тестирования я обнаружил следующую проблему:
Если я использую
@Html.ActionLink("Admin", "AdminHome", "Admin")
@Html.ActionLink("User", "UserHome", "User")
все работает нормально.
Но как только добавляю в ссылку класс например
@Html.ActionLink("User", "UserHome", "User", new { class= "someClass" })
он перестает работать. Когда я теперь нажимаю ссылку на домашнюю страницу пользователя, он направляется на Администратор / Пользователь вместо Пользователь / Пользователь и, очевидно, не может найти страницу.
Это почему? Кто-нибудь когда-нибудь испытывал это?
Я имею в виду, что я все еще могу обернуть его в другой div и добавить туда класс. Я просто хочу знать, есть ли причина такого поведения.
Потому что это должен быть @Html.ActionLink("User", "UserHome", "User", null, new { class= "someClass" })
Тогда, возможно, сочетание двух приведенных выше комментариев: @Html.ActionLink("User", "UserHome", "User", null, new { @class= "someClass" })





Поскольку, как указал в своем комментарии Стивен Мьюке, вам следует использовать метод 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)
Вы используете неправильную перегрузку. Используя это:
@Html.ActionLink("User", "UserHome", "User", new { class= "someClass" })
ASP.Net MVC считает, что четвертый параметр - значения маршрута не соответствует действительности.
Чтобы он работал должным образом, вам нужно использовать эта перегрузка, которая принимает пять параметров и установить атрибуты в пятой позиции, как показано ниже:
@Html.ActionLink("User", "UserHome", "User", null, new { class= "someClass" })
Я установил null на четвертый параметр, потому что кажется, что действие вашего контроллера не требует никакого значения маршрута.
По какой причине вы дважды связали одну и ту же ссылку?
@Rafalon Мне плохо. Фиксированный. Спасибо.
Пожалуйста. Однако, пожалуйста, перечитайте части четвертый параметр (первая перегрузка) и пять параметров (вторая перегрузка). Похоже, что вы считаете this за первую перегрузку, а за вторую не засчитываете. Или я неправильно считаю?
Спасибо! Так плохо, что не осознал своей ошибки. Я думал, потому что класс Element работает, и AdminController тоже работает, код должен быть в порядке. Упустил, что есть еще один промежуточный параметр.
Что произойдет, если вы воспользуетесь
new { @class= "someClass" }? Обратите внимание, чтоclass- это зарезервированное ключевое слово, поэтому вам нужно экранировать его префиксом@.