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) %>