2011-09-23 107 views
3

我有三个具体路线:如何将所有内容重定向到单个控制器?

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

    routes.MapRoute(
     "Admin Section", 
     "AdminSection/{action}/{id}", 
     new { controller = "AdminSection", action = "Index", id = UrlParameter.Optional } 
     ); 

    routes.MapRoute(
     "Listings", 
     "{controller}/{action}/{id}", 
     new { controller = "Listings", action = "Index", id = UrlParameter.Optional } 
     ); 

基本上,第一两条路线按计划工作,但是,我想要的一切,是不是特别的路线被重定向到listings控制器。

我还是很新的路由和一直试图谷歌在过去一小时没有任何的运气 - 我确切地知道是怎么回事,但是,我不知道如何解决它。

我已经使用了RouteDebugger,并且我可以看到它正在触及路线,但问题是,如果未指定控制器,它将只会转到Listings控制器 - 但显然这里总会有东西存在。

我尝试了几种不同的组合 - 我以为我是通过删除网址的{controller}部分并仍然定义默认值来赢得胜利,但是我没有太多运气。

有人知道我需要做什么吗?

回答

4

如何:

routes.MapRoute("Listings", "{action}/{id}", 
     new { controller = "Listings", action = "Index", id = UrlParameter.Optional }); 

site.com/test:

它会去action: testcontroller: listingid = blank

enter image description here

+0

再一次,我觉得自己像一个白痴 - 这正是我想要做的,但是,我在'新{...}'部分犯了一个错误,我没有看到,直到我复制你的例子对此非常感谢。 – Wil

3

编辑:据我了解,你想一个包罗万象的路线。

http://richarddingwall.name/2008/08/09/three-common-aspnet-mvc-url-routing-issues/

routes.MapRoute("Listings", "{*url}", 
    new { controller = "Listings", action = "Index" } 
); 

原文:

我不能在此刻测试这一点,但

routes.MapRoute(
    "Listings", 
    "{anythingOtherThanController}/{action}/{id}", 
    new { controller = "Listings", action = "Index", id = UrlParameter.Optional } 
    ); 

这应该工作。

在您的房源控制器,只接受一个字符串参数“anythingOtherThanController”,它会得到绑定到它。

这里的主要问题是:/一些/动作将映射到相同的动作/其它/动作。所以我不确定你要在这里做什么:)

+0

+1所有的帮助和当我有更多时间时,我会阅读那个(有趣的)链接...但是,当我尝试它时,我接受了一个答案,它确实是我想要的。 – Wil

+0

没有probs。只要它解决了你的问题。抱歉,我无法理解你的要求:)尽管如此,以防万一。 –

1

提供默认路由并提供控制器名称作为列表控制器。将此路由映射保留在所有映射的底部。

routes.MapRoute(
    "Default", 
    "{controller}/{action}/{id}", 
    new { controller = "Listings", action = "Index", id = UrlParameter.Optional } 
    ); 

对不起,我得到了序列混合。

+0

这不起作用 - 我已经尝试过了......如果我想要一个“http://网站”的网址。com/bla“ - 这将试图加载bla控制器的默认动作索引....我需要它加载列表动作的默认控制器(当我说试试看,我的意思是降低如果它是第一个,它会毁了其他路线) – Wil

+0

这将捕获一切,包括AdminSection,不是吗? –

+0

我怀疑如果你这样做,并且有人在adminsection/whatever中输入,将不会进入adminsection路由,而是这个默认路由将尝试并执行它 – jzm

相关问题