什么是使用ASP.NET MVC帮助程序生成链接的最佳选择?

时间:2011-08-24 09:17:50

标签: asp.net-mvc

在ASP.NET MVC 3中使用帮助程序生成链接的最佳选择是什么?

据我所知,最好使用Url.RouteUrlHtml.RouteLink助手而不是Url.ActionHtml.ActionLink来生成链接,因为前两个允许您使用{{ 1}}代替RouteNameController进行网址格式匹配。

2 个答案:

答案 0 :(得分:1)

best 在这种情况下意味着什么?

是不是意味着:

  • 前端开发人员可以轻松编写代码吗? (例如,他们是否必须编写C#来建立链接?)
  • 如果您更改链接指向的位置,则易于维护吗?
  • 新开发人员可以轻松关注吗?
  • 如果您使用强类型对象制作链接,最好?
  • 如果您为每个链接提供的信息非常少,那么最好吗?

因为有很多方法可以创建链接,并且每个方法都有不同的用途,所以我会在不同的时间使用它们,但我通常只是将链接包装在HtmlHelper方法中并创建一个强名称为它:

public static MvcHtmlString GenerateProductUrl(this Urlhelper helper, Product product)
{
    return MvcHtmlString.Create(
        helper.RouteUrl(
            "widgetlink", 
            new {
                    productID = product.ProductId, 
                    productName = product.ProductName.ToUrlSlug() 
                }
        )
    );
}

然后你打电话给如下:

<a href="<%= Url.GenerateProductUrl(Model.Product) %>" class="xurl"><%= Html.Encode(Model.Product.Name) %></a>

如果您希望为您生成一个完整的链接(可能是因为您没有针对单个链接的专门CSS类),那么您可以使用它:

public static MvcHtmlString GenerateProductLink(this Htmlhelper helper, Product product)
{
    return MvcHtmlString.Create(
        helper.RouteLink(
            "widgetlink", 
            new {
                    productID = product.ProductId, 
                    productName = product.ProductName.ToUrlSlug() 
                }
        )
    );
}

使用HtmlHelpers和UrlHelpers可以获得以下优势:

  • 改变链接的一个规范的地方
  • 使用智能感知生成轻松记住名称(开始输入Html.并显示所有链接,特别是如果您将Generate作为生成链接和网址的前缀
  • 当您需要封装整个链接时使用HtmlHelpers,并在需要构建URL时使用UrlHelpers

我在我写的一篇博客文章中详细讨论了这篇文章,其中我列出了一些tips for writing URLs in ASP.NET MVC

答案 1 :(得分:0)

您尝试使用@ html.ActionLink();?