2010-02-15 128 views
0

我有一个客户列表,将有发票和电子邮件链接到它。ASP.NET MVC路由和结构

我有我的客户/信息/ 1和客户/编辑/ 1%的默认路由工作,但想拥有它,而不是像下面

  • 客户 - 列出客户
  • 客户/ 1 /编辑 - 编辑客户ID 1
  • 客户/ 1 /详细信息 - 客户ID的详细信息1
  • 客户/ 1 /发票 - 发票清单为客户ID 1
  • 客户/ 1 /发票/ 3 - 发票的详细信息客户ID为3 1

我设置以下的路由(默认路由之前)

routes.MapRoute("CustomerActions", 
    "customer/{customerid}/{action}/{id}", 
    new { controller = "customer", action = "details", id="" } 
); 

这似乎是工作,但在我的客户编辑观点我有一个像

<%=Html.ActionLink("Back to List", "Index") %> 

但它的ActionLink的给出的网址为

/customer/1/index而不仅仅是/ customer或/ customer/index

回答

0

routes.MapRoute("Customer", 
    "customer/{customerid}/{action}/{id}", 
    new { controller = "customer", action = "details", id="" } 
); 

routes.MapRoute("Customers", 
    "customer", 
    new { controller = "customer", action = "List" } 
); 

至于链接:您可以通过两种途径尝试

<%=Html.RouteLink("Back to List", "Customers", null) %> 
0

你尝试

"{controller}/{action}/{id}", 
      // new { controller = "Customer", action = "Details", id = ""} 

无需客户存在于你的RouteMap。

+0

不过,如果我指定的客户/ 1 /细节它将把1的动作和细节,作为标识 – 2010-02-15 05:44:04

0

您的路线是 “客户/ {客户ID}/{行动}/{ID}”

您指定行动= “指数”,它需要从当前请求客户ID(在你的情况下,1) 和我们/客户/ 1 /指数

/客户/ 1将控制器=“客户”,客户id = 1,行动=“详细信息”根据你的默认

/客户不会路由匹配,原因您没有customerid的预设值