使用HtmlActionLink ASP.NET并添加属性

时间:2015-08-18 17:30:07

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

我正在学习ASP.NET MVC,我遇到了一些问题,我想知道使用Html.ActionLink()方法而不是普通的Anchor标签有什么优势,我不会# 39,看到任何明显的优势,主要是因为我使用ASP的内置方法存在更多问题。我想知道的其他内容是如何向Html.ActionLink()添加各种属性,我使用它:

@Html.ActionLink("About", "About", "Home", new{ area="" }, new Dictionary<string, Object>{ { "class", "about-link" }, { "aria-role", "button" }, { "title", "About us..." } })

我在StackOverflow中找到了这个,但它不起作用,我一直在尝试很多东西,但没有。

2 个答案:

答案 0 :(得分:3)

这是您最感兴趣的方法签名:

public static MvcHtmlString ActionLink(
    this HtmlHelper htmlHelper,
    string linkText,
    string actionName,
    string controllerName,
    object routeValues,
    object htmlAttributes
)

对于您的实例,这将导致以下代码:

@Html.ActionLink("About", "About", "Home", new { area = "" }, new { @class = "about-link", aria_role = "button", title = "About us..." })

有几点需要注意:

  1. 第一个匿名对象用于路由值,第二个匿名对象用于HTML属性以应用于锚标记。
  2. 由于class是保留关键字,因此必须在匿名对象中以@作为前缀。它仍会在锚标记上输出为class
  3. 同样,aria-role是无效的C#语法,因此您必须使用下划线而不是短划线:aria_role。接受htmlAttributes的内置HtmlHelper扩展程序会处理_并在呈现HTML时将其转换为-
  4. 现在,就你为什么要首先使用它而言,@ Christos正确地指出,通过让MVC构建URL,即使你的路由发生变化,你的链接仍然可以工作,而如果你硬编码了URL,它会失败。但是,他忽略了这并不需要使用Html.ActionLink。您可以轻松地执行以下操作:

    <a href="@Url.Action("About", "Home", new { area = "" })" class="about-link" aria-role="button" title="About us...">
        About
    </a>
    

    当您需要链接内部的内容而非直接文本(如图标)时,这尤其方便。如果您发现直接使用HTML属性更容易,那么您可以这样做。这没有任何问题,你没有 使用Html.ActionLink。但是, do 仍然使用Url.Action或其中一个兄弟,因此您的网址是根据您的路由配置动态构建的。

答案 1 :(得分:1)

使用@Html.ActionLink创建链接而不是使用锚元素的基本优势是输出是从路由配置派生的。这意味着如果您更改路线中的某些内容,则此更改会自动反映到您使用此帮助程序创建的链接。

Here您将找到包含此方法所有签名的详细列表。