2012-05-07 68 views
2

我試圖在剃刀視圖中構建URL,它將2個RouteData.Values傳遞給我的操作。MVC 3 - 具有4個參數的RouteUrl

這是代碼:

<input type="button" value="View" onclick="location.href='@Url.RouteUrl("ViewMessage", new { threadId = 955, messageId = 11 })'" /> 

在Global.asax中我定義了以下:

routes.MapRoute(
"ViewMessage", // Route name 
"{controller}/{action}/{threadId}/{messageId}", // URL with parameters 
new { controller = "Board", action = "Messages", threadId = UrlParameter.Optional, messageId = UrlParameter.Optional } // Parameter defaults 

);

爲什麼我的網址是這樣的:

http://localhost/Site/Board/Messages/955?messageId=11 

,而不是像這樣:

http://localhost/Site/Board/Messages/955/11 

我明白,我可以使用的String.format,而是尋找MVC幫手解決

回答

1

請嘗試以下路線

routes.MapRoute(
"ViewMessage", // Route name 
"{controller}/{action}/{threadId}/{threadId}/{messageID}", // URL with parameters 
new { controller = "Board", action = "Messages", threadId = UrlParameter.Optional, messageId = UrlParameter.Optional } // Parameter defaults 
1

我的猜測是:如果threadIdmessageId都是可選的,那麼下面的URL將如何解析:http://localhost/Site/Board/Messages/955

嘗試從threadId(並可能使用不同的路由)刪除UrlParameter.Optional

+0

好吧,threadId也是可選的,但它仍然包含在路由數據中 – eddyuk

+0

從'threadId'中刪除可選的幫助嗎?我可以解釋我的意見,但如果不對,那就沒有意義了。 –