【问题标题】:Optional parameters in MVC3 routingMVC3 路由中的可选参数
【发布时间】:2011-05-25 20:39:13
【问题描述】:

我正在尝试创建可以应用 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 传递“名称”参数以从数据库加载内容。我想要这样的网址

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 中传递的“名称”参数的值。以下是使用的路线

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

【问题讨论】:

    标签: asp.net-mvc-3


    【解决方案1】:

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

    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/ --> 使用first路线图
    2. http://localhost:5879/Home --> 使用 second 路线图
    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:

    屏幕截图 #2:

    截图#3:

    屏幕截图 #4:

    屏幕截图 #5:

    屏幕截图 #6:

    希望能给你一些想法来解决你的问题。

    【讨论】:

    • 感谢详细的回复。让我进行一些测试,然后我会回复你。
    猜你喜欢
    • 2012-12-19
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    相关资源
    最近更新 更多