我正在学习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中找到了这个,但它不起作用,我一直在尝试很多东西,但没有。
答案 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..." })
有几点需要注意:
class
是保留关键字,因此必须在匿名对象中以@
作为前缀。它仍会在锚标记上输出为class
。aria-role
是无效的C#语法,因此您必须使用下划线而不是短划线:aria_role
。接受htmlAttributes
的内置HtmlHelper扩展程序会处理_
并在呈现HTML时将其转换为-
。现在,就你为什么要首先使用它而言,@ 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您将找到包含此方法所有签名的详细列表。