代码之家  ›  专栏  ›  技术社区  ›  Sergi Papaseit

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

  •  0
  • Sergi Papaseit  · 技术社区  · 14 年前

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

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

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

    有什么想法吗?

    提前谢谢。

    2 回复  |  直到 14 年前
        1
  •  1
  •   s1mm0t    14 年前

    helper方法将考虑您设置的路由,以便您能够使用它们,并且它们将根据您的需要输出url。例如:

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

    或者更好的是,如果您使用的是MVC futures assembly,那么您将能够去掉魔术字符串并执行以下操作:

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

    :正如在评论中指出的,上面有一个拼写错误,即行动要求,应该是ActionLink

        2
  •  1
  •   goldenelf2    14 年前

    我认为在这种情况下最好使用RouteLink方法。使用RouteLink可以显式定义要使用的路由的名称。因此,如果你没有任何其他理由不把一个名字放在路线上,命名为“建议”(或任何其他你想要的)。所以路线是:

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

    我有一个类似的问题,复杂的路线,这是我找到的唯一解决办法。 希望对你有帮助。。。