如何在asp.net mvc中为urtelink添加url参数?

时间:2009-05-03 19:54:42

标签: c# .net asp.net asp.net-mvc

所有,我的情况是我有基本路线,还有其他一些简单路线:

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

3 个答案:

答案 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 })

生成正确的网址:

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

答案 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文件中的路由中指定可选参数。默认情况下,任何不匹配的内容都会被放入查询字符串中。