MVC3路由中的可选参数

时间:2011-05-25 20:39:14

标签: asp.net-mvc-3

我正在尝试创建可以应用1和2类型URL的路由。

1 - 第一条路线将在应用程序开始时,我想要2种可用于访问索引页面的URL。当我在最后有一个带有Home的URL而不是输入2时,我无法点击下面的路径。

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

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

2 - 这种类型的URL传递“Name”参数以从DB加载内容。我希望这个网址像

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

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

但我想要上面的网址

http://www.example.com/Contacthttp://www.example.com/About

或者

http://www.example.com/Contact/22http://www.example.com/About/33

其中 Contact和About是URL中传递的“Name”参数的值。以下是使用的路线

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

1 个答案:

答案 0 :(得分:2)

这是一个可能的解决方案。我不确定这是否是正确的方法。

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
    );
}

测试了以下路线。此网站根网址为 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 - >使用第四路线图
  7. 屏幕截图#1:

    Scenario 1

    屏幕截图#2:

    Scenario 2

    屏幕截图#3:

    Scenario 3

    屏幕截图#4:

    Scenario 4

    屏幕截图#5:

    Scenario 5

    屏幕截图#6:

    Scenario 6

    希望能帮助您解决问题。