在 ASP.NET 中使用 Html.ActionLink() 与 asp 属性(例如 <a asp-action=""> 创建链接)

NSo*_*uth 1 asp.net razor

在 ASP.NET Razor 视图中,我看到过以两种不同方式创建的链接:

@Html.ActionLink("Download", "Download", new { id = item.Id })
Run Code Online (Sandbox Code Playgroud)

和

<a asp-area="" asp-controller="MyController" asp-action="Download" asp-route-id="@item.Id">Download</a>
Run Code Online (Sandbox Code Playgroud)

一种方法比另一种方法有优势吗?语法@Html.ActionLink()看起来更紧凑,但也许不允许对最终<a/>标签进行尽可能多的控制?谢谢!

Shy*_*yju 5

第一种是 HTML helper 方法,存在于 MVC4 和 5 中。第二种方法称为 Tag helpers,出现在 asp.net core 中。它看起来更像纯 HTML 语法,因此即使不太熟悉 C# 的 UI 设计人员也可以使用它们来创建链接。

链接标签助手可以做任何ActionLink助手能做的事情,甚至更多。例如,使用链接标签助手,您可以创建这样的 HTML 标记。

<a asp-action="Search" asp-controller="Home">
    <i class="glyphicon glyphicon-search"></i>
</a>
Run Code Online (Sandbox Code Playgroud)

您无法生成上述类型的标记(带有 helper 的锚标记内的其他元素标记)ActionLink。

请记住,您可以在 asp.net core 视图中使用 HTML 帮助器方法。但从 HTML 角度来看,标签助手更容易阅读。

比较在标签帮助器方法中渲染 SELECT 元素的代码

<select asp-for="UserId" asp-items="@Model.UserList">
   <option>Select one</select>
</select>
Run Code Online (Sandbox Code Playgroud)

与

@Html.DropDownListFor(a=>a.UserId, Model.UserList,"select one")
Run Code Online (Sandbox Code Playgroud)

恕我直言,标签帮助器方法对设计者更加友好且可读