MVC с областями - Html.ActionLink возвращает неправильный URL / маршрут? - PullRequest
6 голосов
/ 26 мая 2011

Я использую MVC3 и в моем приложении есть Области.В общем, все работает нормально, я могу перейти к своей области (например, Admin = Area, Controller = Department) следующим образом:

<%: Html.ActionLink("Departments", "DepartmentIndex", "Department", new { area = "Admin"}, null )%>

Однако я заметил, что если я не укажу областьв моем ActionLink, например,

<%: Html.ActionLink("Test", "Index", "Home")%>

Это перестанет работать, если я перешел в область «Администратор».т.е. мой URL теперь http://localhost/myproj/Admin/Home/Index вместо http://localhost/myproj/Home/Index

Любые идеи о том, что здесь происходит?

Мои маршруты все по умолчанию, когдасоздание приложения MVC / Области.то есть

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
            new[] { "MyProj.Controllers" } 
        );
    }

И регистрация моего района

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Admin_default",
            "Admin/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional }
        );
    }

Это по замыслу?В этой публикации предлагается использовать RouteLink вместо ActionLink: скажем, для использования RouteLink Требуется ли указывать значение маршрута "area" в actionlink, если приложение было сгруппировано по областям?

1 Ответ

8 голосов
/ 03 ноября 2011

В этом ответе StackOverflow правильно указано, что вам необходимо указать имя Area, если вы используете области.

например.

Html.ActionLink("Home", "Index", "Home", new { Area = "" }, new { })
...