我有一个用几个硬编码(非参数)段定义的路由:
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方法中使用这些非参数段。
有什么想法吗?
提前致谢。
答案 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 })
我遇到了类似复杂路线的问题,这是我找到的唯一解决方案。 希望它有所帮助...