2009-10-14 68 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的)的代碼,沒有?