ActionLink не может получить доступ к корневой папке - MVC 3 - PullRequest
0 голосов
/ 03 марта 2012

У меня есть веб-приложение .Net MVC 3, которое имеет следующую структуру

  • корень
    • Просмотров
      • Счет
        • LoginPage.aspx
    • Контроллеры
      • AccountController
    • Область
      • Курс
        • index.aspx

Представьте, что я нахожусь на странице Index.aspx в области курса, и у меня будет кнопка, которая перенаправит меня на LoginPage.aspx

В ASP.Net MVC я бы назвал http://localhost/Account/Login, чтобы это привело меня к правильной странице. Если я просто запишу его в браузере, он будет работать!

Но я бы хотел использовать HTML Helper ActionLink , поэтому я попробовал:

<%: Html.ActionLink("Log on", "Login",  "Account", routeValues: null, htmlAttributes: new {  id = "logonLink", data_dialog_title = "Logon" })%>

Получается относительный путь: http://localhost/Course/Account/Login

Я пробовал также:

<%: Html.ActionLink("Log on", "Login",  "../Account", routeValues: null, htmlAttributes: new {  id = "loginLink", data_dialog_title = "Login" })%>

Я получил сообщение об ошибке: Невозможно использовать ведущий .. для выхода из верхнего каталога.

Я также попробовал относительный путь:

<%: Html.ActionLink("Log on", "Login",  "~/Account", routeValues: null, htmlAttributes: new {  id = "loginLink", data_dialog_title = "Login" })%>

И это привело меня к:

http://localhost/Course/~/Account/Login

Я был бы очень признателен, как найти решение этой проблемы.

1 Ответ

2 голосов
/ 03 марта 2012

Попробуйте это:

<%: Html.ActionLink("Log on", "Login",  "Account", new { area = "" } , new {  id = "logonLink", data_dialog_title = "Logon" })%>

Ключ - бит area = "". При использовании Url.Action или Html.ActionLink с областями, если вы не укажете значение маршрута area, MVC будет искать совпадения только в текущей области.

Это становится еще более важным при использовании частичных представлений / шаблонов, поскольку они могут отображаться в представлениях в разных областях.

Таким образом, если вы используете области, то привычно всегда указывать значение маршрута area, если только не используете Url.RouteUrl или Html.RouteLink.

...