所有,我的情况是我有基本路线,还有其他一些简单路线:
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链接到此内容?
您无法添加'?'路由到全局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
答案 0 :(得分:1)
我自己找到了解决方案。你可以只做一个常规的Html.RouteLink和你没有映射到global.asax中的url的任何对象属性,它添加为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 })
生成正确的网址:
答案 1 :(得分:0)
Matthew的方法可能不起作用,因为他最后需要另一个null
参数,否则它将路由值作为html属性传递。 :)
<%= Html.ActionLink("Link text", "Index", "Home", new { id = 1, when = "lastmonth" }, null) %>
你提出的那个最后MapRoute()
应该可以正常对付它。
答案 2 :(得分:-1)
我没有一台计算机能够对此进行测试,但却无法进行测试
<%= Html.ActionLink("Link text", "Index", "Home", new { id = 1, when = "lastmonth" } %>
您不需要在global.asax.cs文件中的路由中指定可选参数。默认情况下,任何不匹配的内容都会被放入查询字符串中。