ASP.NET MVC中的URL构建

ASP.NET MVC中的URL构建,asp.net,asp.net-mvc,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
        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 }
            );
这允许我有一个分页列表,也可以按区域或主题进行过滤

我想与主题建立一系列链接,这样我可以单击主题,它将根据需要返回上面的URL之一,并根据需要附加/subjects/SubjectName位。我还想允许用户点击几个链接,这些链接应该会给出上面带有/Subjects/subject1\u*subject2*\usubject3的URL

我就是不知道怎么做。我已经在局部视图中显示了主题列表。当我生成超链接时,如何访问url并修改(或根据需要添加或删除)/Subjects/*部分

使用查询字符串很容易,因为它们可以很容易地被分解成值,但是使用这些漂亮的URL似乎很难。。。有什么建议吗

更新:我忘了补充说我想在同一个控制器上对不同的操作使用这个过滤方法。我不确定这是否重要,但我想我会说得很准确

更新2:我想我的问题还不够清楚

我想做的是为我的局部视图中的每个主题生成一个链接,该链接与主视图中的链接相关。关键是链接需要符合上面的一条路由

比方说,我从/localhost/Projects/All调用它,并希望按subject1排序,我希望得到的URL是/localhost/Projects/All/Subjects/subject1。如果我从/localhost/Projects/Search/Something/10(即搜索结果的第10页“Something”,我在列表中没有这个路由,但它正在工作中),我想要像localhost/Projects/Search/Something/Subjects/Subject1/10这样的URL。或者从/localhost/Projects/All/4转到localhost/Projects/All/Subjects/subject1/4

我可以很容易地将/Subjects/Subject1位附加到URL,但之后就不再符合我的路由了。。。 换言之,我如何从我的url中提取各种信息,修改它们,然后将它们重新缝合在一起

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

Url.Action(“所有”,“项目”,新的{subjects=“some subject”})


将为一个刚刚传入主题的对象提供正确的url,更改匿名对象中的参数以将其更改为相应的

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

谢谢,我知道,但这并不能满足我的需要。谢谢,这让我更进一步,但是我的url标识符,/Regions/和/Subjects/没有进入路由数据,因此我无法在从中获取值后重建url。你对此有什么建议吗?