Необязательные параметры в маршрутизации MVC3 - PullRequest
0 голосов
/ 26 мая 2011

Я пытаюсь создать маршруты, которые могут использовать URL-адреса 1 и 2 типа.

1 - Первый маршрут будет в начале приложения, и я хочу 2 типа URL, которые могут использоваться для доступа к странице индекса. Я не могу нажать ниже маршрута, когда у меня есть URL с Home в конце, вместо того, чтобы набрать 2.

http://www.example.com Or http://www.example.com/Home

routes.MapRoute(
               "Default",
               "{controller}/{action}",
               new { controller = "Home", action = "Index", name = "" }
           );

2 - URL этого типа передает параметр «Имя» для загрузки содержимого из БД. Я хочу этот URL как

http://www.example.com/Page?name=Contact Или

http://www.example.com/Page?name=Contact&id=22

Но я хочу выше URL, как

http://www.example.com/Contact Или http://www.example.com/About

Или

http://www.example.com/Contact/22 Или http://www.example.com/About/33

Где Contact и About являются значениями для параметра «Имя», передаваемого в URL. Ниже маршрут используется

 routes.MapRoute(
                "DynamicPages",
                "{name}",
                new { controller = "Home", action = "Page" }
            );

1 Ответ

2 голосов
/ 26 мая 2011

Вот возможное решение. Я не уверен, что это правильный способ сделать это.

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

    //To match http://www.mysite.com
    routes.MapRoute(
        "RootUrl",
        "",
        new { controller = "Home", action = "Index", 
                id = UrlParameter.Optional }
    );

    //To match http://www.mysite.com/Home
    routes.MapRoute(
        "RootUrlWithAction",
        "Home/{action}",
        new { controller = "Home", action = "Index" }
    );

    //To match http://www.mysite.com/Contact Or 
    //      http://www.mysite.com/About Or
    //      http://www.mysite.com/Contact/22 Or
    //      http://www.mysite.com/About/33
    routes.MapRoute(
        "DynamicPages",
        "{name}/{id}",
        new { controller = "Home", action = "Page", 
                id = UrlParameter.Optional }
    );

    // Everything else
    routes.MapRoute(
        "Default",
        "{controller}/{action}/{id}",
        new { controller = "Home", action = "Index", 
                    id = UrlParameter.Optional } // Parameter defaults
    );
}

Проверены следующие маршруты. Здесь URL-адрес корня сайта: http://localhost:5879/. См. Приведенные ниже снимки экрана для каждого из нижеприведенных сценариев.

  1. http://localhost:5879/ -> Используется первый карта маршрута
  2. http://localhost:5879/Home -> Использование секунда карта маршрута
  3. http://localhost:5879/Contact -> Использует третий карта маршрута
  4. http://localhost:5879/About/33 -> Использование третье карта маршрута
  5. http://localhost:5879/Home/Page?name=Contact&id=22 -> Использование третье карта маршрута
  6. http://localhost:5879/Home/Index/2 -> Использует четвертый карта маршрута

Скриншот № 1:

Scenario 1

Снимок экрана № 2:

Scenario 2

Снимок экрана № 3:

Scenario 3

Снимок экрана № 4:

Scenario 4

Скриншот № 5:

Scenario 5

Снимок экрана № 6:

Scenario 6

Надеюсь, это даст вам представление о том, как решить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...