2009-05-03 50 views
1

所有,我的情況是,我的基本路線,加上其他一些簡單的路線:如何添加一個url參數到asp.net mvc中的routelink?

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

所以下面的網址工作:http://somesite.com/tags/index/1

不過,我的一些索引頁的採取URL參數以下列方式:

http://somesite.com/tags/index/1?when=lastmonth

如何使用Html.RouteLink鏈接到此?

不能 add'?'在全球ASAX文件的路線是這樣的:

routes.MapRoute("TagsWhen", "Tags/index/{id}?when={when}", 
     new {controller = "Tags", action = "Index", id = "", when = ""}); 

如果這條線路的工作,我可以用鏈接到它:

Html.RouteLink(string.Format("{0} ", link.Rating), "LinksWhen", 
       new {id=link.ReferenceId, when=Model.When}) 

,但它不會!所以我不知道我怎麼會用一個Html.RouteLink產生http://somesite.com/tags/index/1?when=lastmonth

回答

1

剛剛找到了解決方案。你可以做一個常規的Html.RouteLink和任何對象屬性,你沒有映射到它作爲URL參數添加的global.asax中的url。

因此,使用這條路線:

routes.MapRoute(
     "Links",            
     "Links/details/{id}",       
     new { controller = "Links", action = "Details", id = ""} defaults 
    ); 

這routelink:

Html.RouteLink("Link Text", "Links", 
     new {id=link.ReferenceId, when=Model.When }) 

產生正確的網址:

http://localhost:2535/Links/details/1?when=onemonth

-1

我沒有能夠測試這個電腦,但是從我的頭頂

<%= Html.ActionLink("Link text", "Index", "Home", new { id = 1, when = "lastmonth" } %> 

你不」 t需要在global.asax.cs文件的路由中指定可選參數。任何不匹配的內容都會默認被查詢到查詢字符串。

+0

但不會產生不正確的網址? – 2009-05-03 20:02:33

+0

剛試過這個,它生成: http://somesite.com/tags/index?when=lastmonth 並沒有添加id ... – 2009-05-03 20:10:21

0

馬修的做法可能沒有工作,因爲他需要另一個null參數e結束,否則它將路由值作爲html屬性傳遞。 :)

<%= Html.ActionLink("Link text", "Index", "Home", new { id = 1, when = "lastmonth" }, null) %> 

最後MapRoute()你想出了應該正常工作。