Вопрос

I have an .Net MVC 3 web application that has the following structure

  • root
    • Views
      • Account
        • LoginPage.aspx
    • Controllers
      • AccountController
    • Areas
      • Course
        • Index.aspx

Imagine I am currently at the Index.aspx page in the Course area, and I would have a button that would forward me to the LoginPage.aspx

In a ASP.Net MVC I would call http://localhost/Account/Login that it would lead me to the correct page. If I just write it down on the browser it works!

But I would like to use the HTML Helper ActionLink, so I tried:

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

It get the relative path: http://localhost/Course/Account/Login

I tried also:

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

I got the error message: Cannot use a leading .. to exit above the top directory.

I also tried the relative path:

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

And it lead me to:

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

I would really appreciate how to find a solution for this problem.

Это было полезно?

Решение

Try this:

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

The key is the area = "" bit. When using Url.Action or Html.ActionLink with areas, if you don't specify the area route value, MVC will only look for a match in the current area.

It get's even more important when using partial views/templates, since they can be rendered in Views in different areas.

So if using areas, get into the habit of always specifying the area route value, unless using Url.RouteUrl or Html.RouteLink.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top