在ASP.NET MVC 2上为具有非参数url段的路由生成链接

时间:2010-05-07 23:20:17

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

我有一个用几个硬编码(非参数)段定义的路由:

routes.MapRoute(null, "suggestion/list/by/{tag}", 
       new { controller = "Suggestion", action = "List", tag = UrlParameter.Optional });

假设我在SuggestionController的Index视图中,它有一个Model的Suggestion对象,我该如何创建一个匹配该路由的链接?

我知道我可以通过使用普通的'html来完成我:

<a href="/suggestion/list/by/<%=Model.Tag %>"><%=Model.Tag %></a>

但这使得无法传递其他路由参数(例如,作为RouteValueDictionary),不是吗?

我实际上想知道是否可以使用其中一个提供的帮助程序,但没有命名路由。我宁愿将路由名称保留为null,以避免对我的视图进行大量硬编码,但我无法弄清楚如何在Html.ActionLink或RouteLink方法中使用这些非参数段。

有什么想法吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

辅助方法将考虑您设置的路由,以便您可以使用它们,并且它们将根据您的需要输出URL。例如:

<%= Html.Action(Model.Tag, "List", "Suggestion", new { tag = Model.Tag }, null) %>

或者甚至更好,如果你正在使用MVC期货装配,你将能够取消魔术弦并做:

<%= Html.Action<SuggestionController>(c => c.List(Model.Tag), Model.Tag) %> // Add checks for null if Tag can be null

编辑:正如评论中指出的那样,上面有一个拼写错误,对Action的调用应该是ActionLink

答案 1 :(得分:1)

我认为在这种情况下最好使用RouteLink方法。使用RouteLink,您可以明确定义要使用的路由的名称。因此,如果您没有任何其他理由不在路线中添加名称,请将其命名为“建议”(或您想要的任何其他内容)。所以RouteLink将是:

<%: Html.RouteLink(Model.Tag, "suggestion", new RouteValueDictionary { tag = Model.Tag })

我遇到了类似复杂路线的问题,这是我找到的唯一解决方案。 希望它有所帮助...