Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在asp.net mvc中将url参数添加到routelink?_C#_.net_Asp.net_Asp.net Mvc - Fatal编程技术网

C# 如何在asp.net mvc中将url参数添加到routelink?

C# 如何在asp.net mvc中将url参数添加到routelink?,c#,.net,asp.net,asp.net-mvc,C#,.net,Asp.net,Asp.net Mvc,总之,我的情况是,我有基本路线,再加上一些其他简单路线: routes.MapRoute( "Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index

总之,我的情况是,我有基本路线,再加上一些其他简单路线:

routes.MapRoute(
                "Default",                                              
                "{controller}/{action}/{id}",                           
                new { controller = "Home", action = "Index", id = 1}
            );
所以下面的url是有效的:

但是,我的某些索引页采用以下方式获取url参数:

如何使用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来生成

我没有一台计算机能够测试这一点,但这是我脑子里想不出来的

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


您不需要在global.asax.cs文件中的路由中指定可选参数。默认情况下,任何不匹配的内容都会被放入查询字符串中。

我自己刚刚找到了解决方案。您只需执行一个常规的Html.RouteLink和任何未映射到global.asax中url的对象属性,它会作为url参数添加

因此,使用这条路线:

    routes.MapRoute(
        "Links",                                              
        "Links/details/{id}",                           
        new { controller = "Links", action = "Details", id = ""} defaults
    );
这条路线是:

Html.RouteLink("Link Text", "Links", 
        new {id=link.ReferenceId, when=Model.When })
生成正确的url:


Matthew的方法可能不起作用,因为他需要另一个
null
参数,否则它会将路由值作为html属性传递。:)



您提出的最后一个
MapRoute()
应该可以解决这个问题。

但这不会生成一个不正确的url吗?只是尝试了一下,它生成了:并且没有添加id…问题明确地说是
RouteLink
,而不是
ActionLink
。您应该仍然能够基于ActionLink。我不知道为什么马修的解决方案不起作用?我和他使用ActionLink做了同样的事情,在这里我有一个url:…/delete/124?otherId=5Plus如果你使用RouteLink,你要添加另一个依赖项,“Links”路由名称必须始终存在,并且你要将该名称绑定到一个引用。在你的视图中(如果你更改名称,你也会遇到异常)。因为您有一个标准的路由,
ActionLink
就可以了,然后您就不需要为它自己单独命名的路由编写代码了。我很好奇。既然你可以拥有一个漂亮的url,为什么你还要创建一个“丑陋”的url?!
<%= Html.ActionLink("Link text", "Index", "Home", new { id = 1, when = "lastmonth" }, null) %>