ActionLink и Url.Action предназначены для разных местоположений, когда атрибут area указан в Asp.net MVC 4
В _LoggedInUser.cshtml(который находится в папке Views/Shared в корне приложения). Я хочу вызвать метод Logout контроллера AC. У меня есть два варианта:
Использование ActionLink
@Html.ActionLink("Logout", "Logout", "AC", new { area = string.Empty })
ИЛИ
<a href="@Url.Action("Logout", "AC", new { area = string.Empty })">Logout</a>
Я указываю область, потому что хочу вызвать метод действия контроллера переменного тока, независимо от области, в которой он находится.
Насколько я понимаю, разница между @Html.ActionLink() и @Url.action заключается в том, что сначала генерируется якорный тег, где второй возвращает URL-адрес (пожалуйста, исправьте меня, если я ошибаюсь), поэтому я думаю, что оба должны цель в том же месте, но здесь @Html.ActionLink имеет следующее расположение ссылки:
http://localhost:13974/Home/logout?Length=2
тогда как <a href="@Url.Action(
.... имеет следующее местоположение ссылки:
http://localhost:13974/AC/Logout
Обе ссылки работают нормально, когда атрибут области удаляется, но @Html.ActionLink() ломается, когда я указываю область
Почему обе ссылки нацелены на разные местоположения, когда я указываю область?
Ответы
Ответ 1
Вы можете использовать
@Html.ActionLink("Logout", "Logout", "AC", new { area = string.Empty }, null)
Вы можете использовать перегрузку, LinkExtensions.ActionLink Method (HtmlHelper, String, String, String, Object, Object)
Для получения дополнительной информации посетите LinkExtensions.ActionLink
Кроме того,
Нет перегрузки как LinkExtensions.ActionLink Method (HtmlHelper, String, String, String, Object)
Ответ 2
Что вы хотите, это перегрузка:
//linkText, actionName, controllerName, routeValues, htmlAttributes
<%=Html.ActionLink("Logout", "Logout", "AC", new {area = string.Empty}, null) %>
попробуйте и сообщите нам, если это решит проблему.
Ответ 3
Вы используете неправильную перегрузку метода ActionLink
. Измените его на
@Html.ActionLink("Logout", "Logout", "AC", null, new { area = string.Empty })