ASP.NET MVC中的URL构建

时间:2011-09-01 03:07:54

标签: asp.net asp.net-mvc

我有四条路线定义如下:

//Project list with page number
        routes.MapRoute(
            "Filtered projects 1",
            "Projects/All/{page}",
            new { controller = "Projects", action = "All", page = UrlParameter.Optional }
            );

        //Project list with page number and filtering by region
        routes.MapRoute(
            "Filtered projects 2",
            "Projects/All/Regions/{regions}/{page}",
            new { controller = "Projects", action = "All", regions = UrlParameter.Optional, page = UrlParameter.Optional}
            );

        //Project list with page number and filtering by subject
        routes.MapRoute(
            "Filtered projects 3",
            "Projects/All/Subjects/{subjects}/{page}",
            new { controller = "Projects", action = "All", subjects = UrlParameter.Optional, page = UrlParameter.Optional }
            );

        //Project list with page number and filtering by region and subject
        routes.MapRoute(
            "Filtered projects 4",
            "Projects/All/Regions/{regions}/Subjects/{subjects}/{page}",
            new { controller = "Projects", action = "All", regions = UrlParameter.Optional, subjects = UrlParameter.Optional, page = UrlParameter.Optional }
            );

这允许我有一个分页列表,也可以按区域或主题过滤。

我想与主题建立一系列链接,这样我就可以点击一个主题,它会根据需要返回上面的一个网址,其中包含/ Subjects / SubjectName 位根据需要附加。我还想让用户点击几个链接,这些链接应该给上面的网址带/ Subjects / subject1 _ * subject2 * _ subject3

我无法弄清楚如何做到这一点。我已经在局部视图中显示了主题列表。当我生成超链接时,如何访问网址并修改(或根据需要添加或删除)/ Subjects / * 部分?

查询字符串很容易,因为它们很容易被打成价值巴黎,但是这些漂亮的网址似乎很难......任何提示?

更新:我忘了添加我想在同一个控制器上使用不同操作的过滤方法。不确定这是否重要,但我认为我是准确的。

更新2:我认为我的问题不够清楚......

我要做的是在部分视图中为主视图中的链接生成每个主题的链接。问题在于链接需要符合上述路线之一。

说,我从/ localhost / Projects / All调用此函数,并希望按subject1排序,我想获取urls说/ localhost / Projects / All / Subjects / subject1。如果我从/ localhost / Projects / Search / Something / 10(即搜索“Something”的搜索结果的第10页)调用了这个,我在列表中没有这条路线,但它正在开发中,我想要网址如localhost / Projects / Search / Something / Subjects / Subject1 / 10。或者从/ localhost / Projects / All / 4到localhost / Projects / All / Subjects / subject1 / 4。

我可以轻松地将/ Subjects / Subject1位附加到URL,但之后又不再符合我的路由...... 换句话说,我如何从我的网址中提取各种位,修改它们然后再将它们拼接在一起?

这可能吗?或者我应该忘记漂亮并使用查询字符串?

2 个答案:

答案 0 :(得分:0)

Url.Action("All","Projects", new{subjects = "some subject"})

会为刚刚传入主题的人提供正确的公式化网址,更改匿名对象中的参数以将其更改为适当的

答案 1 :(得分:0)

使用ViewContext.RouteData获取当前路线信息。