2009-10-14 65 views
1

例如定制的路线,你有这样的定制路线: 有两个参数,ID和客户ID

CustomerOrder/{action}/{id}/customerid={customerid}

网址变成这个样子:

CustomerOrder/Create/customerid=1

如何你可以得到customerid并在视图中使用它?

<%= Html.MenuItem("Back to List", "Index", new { customerID = ???????? })%>

+0

难道您不能更改您的请求网址以匹配此路线:CostomerOrder/{action}/{id}/{customerId}? – 2009-10-14 06:33:57

+0

有什么区别? – h3n 2009-10-14 06:51:28

+0

然后问题是什么?对不起 – 0100110010101 2009-10-14 07:00:43

回答

0

继承人在Global.asax中

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute("CustomerOrders", "CustomerOrder/{action}/{id}/customerid={customerid}", 
         new { customerid= "{customerid}", controller = "CustomerOrder", action = "Index", id = "" }); 

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

    } 

+0

CustomerOrders不是一个正确的网址,因为你没有指定?任何状况之下。 – 2009-10-14 08:33:08

+0

当然,您至少应该这样做:CustomerOrder/{action}/{id} /?customerid = {customerid} – 2009-10-14 08:33:44

+0

请用此更新您的问题,而不是将其添加为新答案。 – 2009-10-14 08:44:46

3

等号是要混淆URL解析器,因为它具有特殊的意义。

如果你要你的路线更改为:

routes.MapRoute("CustomerOrder", "CustomerOrder/{action}/{id}", 
    new { controller = "Order", id = "" }); 

那么下面视图代码

<%= Html.MenuItem("Back to List", "Index", new { customerID = 5 })%> 

将创建一个链接:

CustomerOrder/Index/?customerid=5 

这会工作得很好。

注意

鉴于当前的路由配置,你会被删除您CustomerOrder的路线,因为它坏了,你从默认路由所期望的结果得到同样的结果。

+0

我试图将其更改为?customerid = 1,但发生此错误。 路由URL不能以'/'或'〜'字符开头,并且不能包含'?'字符。 参数名称:routeUrl – h3n 2009-10-14 07:20:28

+0

@fleents:你可以在Global.asax.cs中复制你的路由配置吗?这可能会有所帮助。并把它放在你原来的问题中。不在这里...... – 2009-10-14 07:55:16

+0

@Frients:你不能在路线中放置querystrings。菲尔哈克讨论,他们不使用在这里:http://haacked.com/archive/2007/12/17/testing-routes-in-asp.net-mvc.aspx#58629 – 2009-10-14 08:45:28

0

我是新来的MVC,但我想控制器得到了客户ID参数,并可能被传递到视图(通过ViewData的)的代码,没有?