2010-01-28 33 views
2

我在我的ASP.NET MVC应用程序中有两个(到目前为止)不同类型的路由,一个是:{controller}/{action}/{id}和另一个{controller}/{行动}/{TITLE}两种不同的通用路由类型

目前我需要像这样定义路由:

 routes.MapRoute (
      "Default_Title_Slug",          // Route name 
      "product/details/{title}",       // URL with parameters 
      new { controller = "product", action = "details", title = "" }  // Parameter defaults 
     ); 

     routes.MapRoute (
      "Default",            // Route name 
      "{controller}/{action}/{id}",       // URL with parameters 
      new { controller = "site", action = "index", id = "" } // Parameter defaults 
     ); 

注意,第一个我不得不阕产品控制器,这似乎是只有这样我才能得到它的工作......否则其他路线最终看起来像这样:

/controller/action?id=number 

现在我需要添加另一个MapRoute调用,以{title}段为目标的另一个控制器...我不想为将来提出的每个特定条目创建一个新路由...是否有一个通用的路线我可以创建映射/控制器/行动/标题,将与/控制器/动作/ ID路线很好地发挥?

感谢,
基隆

+0

请停止回滚正在添加正确标记的更改 – skaffman 2010-01-28 12:56:00

+0

它已在asp.net下标记,实际上路由是特定于asp.net的。停止添加无意义的标签。 – Kieron 2010-01-28 12:56:32

+1

重新标记;路由比MVC更广泛(它也可以和webforms一起使用),很少有人会观看这样的granalur标签 - 这是非常值得的。 – 2010-01-28 13:07:17

回答

4

你可以做到这一点的路线约束,如正则表达式 - 一个非常类似例子是here。例如:

routes.MapRoute (
    "Default", 
    "{controller}/{action}/{id}", 
    new { controller = "site", action = "index", id = "" }, 
    new { id = @"\d+" } 
); 
routes.MapRoute (
    "Default_Title_Slug", 
    "{controller}/{action}/{title}", 
    new { controller = "product", action = "details", title = "" } 
); 
+0

完美,谢谢! – Kieron 2010-01-28 13:04:46

+0

只需要清楚,Default_Title_Slug现在可以将它的url更改为 {controller}/{action}/id 012fftoo – Kieron 2010-01-28 13:05:49

+0

@Kieron - 欢呼声 - 复制/粘贴错误;-p固定。 – 2010-01-28 13:08:06

相关问题