2011-09-01 50 views
0

我有这样的定义了四种途径:URL建筑在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 } 
      ); 

这让我有一个分页列表,它也可以通过地区或主题过滤。

我想与主题建立一系列链接,以便我可以点击主题,并根据需要返回上面的某个网址,并根据需要附加/主题/ 主题名位。我还希望允许用户点击几个链接,这应该会提供类似以上的网址/ Subject/_ * subject2 * _ subject3

我只是不知道如何做到这一点。我有部分视图显示的主题列表。当我生成超链接时,如何才能到达url并修改(或者根据需要添加或删除)/ Subjects/*部分?

querystrings很容易,因为它们可以很容易地打破价值巴黎,但与这些美丽的网址似乎相当困难......任何提示?

更新:我忘了补充说我想在同一个控制器上对不同的动作使用这种过滤方法。不知道这是否重要,但我认为我会精确。

更新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中,但是不再符合我的路线... 换句话说,我如何从我的URL中提取各个位,修改它们并然后将它们缝合在一起?

这可能吗?或者我应该忘记漂亮并使用querystrings?

回答

0

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

+0

谢谢,这已经让我进一步了,但是我的URL标识符/ Regions /和/ Subjects /不会将其添加到路由数据中,所以在获取值之后我无法重新生成URL从中。你有什么建议吗? –

+0

解决了它。这帮助了我,谢谢! –

0

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

会给你正确制定的​​URL一个刚刚通过了一个主题,改变PARAMS在匿名对象来改变它作为一个apporpriate

+0

谢谢,我知道,但那不符合我的需要。 –