ASP.NET MVC URL Route Mapping (перезапись URL) Проблема - PullRequest
0 голосов
/ 06 сентября 2011

Вот моя структура папки .Net MVC:

screenshot

У меня есть отдельная папка с именем «Area», и внутри нее у меня есть папка с именем «Restaurant». Внутри этой папки «Restaurant» у меня есть контроллер под названием «MenuController», действие которого называется «Index»

Я пытаюсь переписать URL (Custom Route Mapping) внутри «Global.asax.cs», используя следующий код.

routes.MapRoute(
                "RestaurantMenu", // Route name
                "Restaurant/{id}", // URL with parameters
                new { controller = "/Restaurant/Menu", action = "Index", id = UrlParameter.Optional }
                // Parameter defaults
                );

Но это дало мне ошибку HTTP 404.

1 Ответ

2 голосов
/ 06 сентября 2011

Параметром контроллера внутри вашего маршрута должно быть имя контроллера, а не путь:

Если имя вашего контроллера Menu, измените его следующим образом:

routes.MapRoute(
    "RestaurantMenu", // Route name
    "Restaurant/{id}", // URL with parameters
    new { controller = "Menu", action = "Index", id = UrlParameter.Optional }
    // Parameter defaults
);

И еще одна странная вещь: этот маршрут находится внутри вашего файла Global.asax? Он должен находиться внутри вашего файла RestaurantAreaRegistration.cs следующим образом:

public class RestaurantAreaRegistration : AreaRegistration {

    public override string AreaName {
        get {
            return "Restaurant";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context) {

        context.MapRoute(
              "RestaurantMenu", // Route name
              "Restaurant/{id}", // URL with parameters
              new { controller = "Menu", action = "Index", id = UrlParameter.Optional }
             // Parameter defaults
        );

        context.MapRoute(
            "Accommodation_default",
            "accomm/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional }
        );

    }
}

тогда вы можете дать этому шанс. Если вы хотите использовать ActionLink с этим маршрутом, используйте его так:

@Html.ActionLink("MyLink", "Index", "Menu", new { id = 1, Area = "Restaurant"})

Я написал приведенный выше код с помощью блокнота, поэтому возможны некоторые опечатки:)

...