2010-08-04 147 views
3

默认路由工作正常asp.net的MVC路由问题

mysite.com/home/about

,我甚至看到如何自定义它,使之更短

所以我可以说:

mysite.com/edit/1 而不是 mysite.com/home/edit/1

,但我怎么可以让它更长的时间来HANDL像下面

mysite.com/admin/user/1ËURL //工作

mysite.com/admin/user/details //不起作用

mysite.com/admin/question /创建//不起作用

我不能只把ID作为一个动作?我需要一个自定义路线?

做我需要为每个表中创建新的控制器或我可以路线他们都通过管理控制器

非常感谢

+0

它像我想要一个控制器“管理员”和两个动作“用户”和“删除” – 2010-08-04 19:40:33

+0

较长的路线必须是前短路线。发布您的路由代码。 – 2010-08-04 19:41:52

+0

对不起,我还没有它......只是想知道如何使更改默认处理这个谢谢 – 2010-08-04 19:46:52

回答

2

Areas功能

可以实现这种类型的路由,而不领域,但作为控制器的数量变大网站的可维护性会减弱。本质上,你所做的是将控制器名称硬编码到路由定义中,这意味着你必须为每个新的管理控制器添加新的路由映射。以下是您可能想要设置不带区域的路线的几个示例。

routes.MapRoute("AdminQuestions", // Route name 
       "admin/question/{action}/{id}", // URL with parameters 
       new { controller = "AdminQuestion", action = "Index" } // Parameter defaults 
    ); 

routes.MapRoute("AdminUsers", // Route name 
       "admin/user/{action}/{id}", // URL with parameters 
       new { controller = "AdminUser", action = "Index" } // Parameter defaults 
    ); 

或者,您也可以通过管理控制器路线的一切,但它很快就会变得非常混乱与您的控制器操作执行多个角色。

routes.MapRoute("Admin", // Route name 
       "admin/{action}/{type}/{id}", // URL with parameters 
       new { controller = "Admin", action = "Index" } // Parameter defaults 
    ); 

与您AdminController行动(S)看起来像:

public virtual ActionResult Create(string type, int id) 
{ 
    switch (type) 
    { 
     case 'question': 
      // switch/case is code smell 
      break; 
     case 'user': 
      // switch/case is code smell 
      break; 
     // etc 
    } 
} 
1

添加路线Global.asax中是相当简单的。将更具体的路线放在更一般的路线之上。最典型的模式是控制器/动作/参数/参数...如果您需要更复杂的东西,您可能需要查看MVC区域。在上例中,“mysite.com/admin/user/details”正在寻找控制器命名为“管理员”和行动命名为“用户”,与如已经提到的,可能是你最好的选择将是使用新的一切的行动方法是参数后(假设一个典型的路线设置)

+0

亚,但也需要一个参数以及delails mysite.com/admin/user/details/23 也许我需要一个每个表的新控制器 – 2010-08-04 21:22:44

+0

控制器是类。动作是关于(如此相关)这些类的方法。这就是你应该如何建模你的应用程序。路线可以任何你需要的方式配置。这听起来像你可能想要在mvc中查找“区域”。 – ThatSteveGuy 2010-08-04 23:40:01