ASP.net Core中正确的标记用法是什么? TagHelpers与HTML Helper

时间:2016-09-29 07:00:48

标签: asp.net asp.net-mvc asp.net-core-mvc asp.net-core-1.0

自ASP.Net Core发布以来,Asp团队正在推动使用TagHelpers而不是HTML帮助者。

在控制器的脚手架视图中,ASP.Net Core使用TagHelpers创建添加,编辑页面,但如果您注意到索引页面,他们会使用旧的HTML帮助程序。

//Ex:
    <th>
        @Html.DisplayNameFor(model => model.Package)
    </th>

理解ASP.net核心团队的议程是非常困惑的。有谁知道在ASP.net Core中这样做的正确方法是什么?我的猜测是@Html.DisplayNameFor(model => model.Package)很快会被标记为已弃用。请解释一下?

5 个答案:

答案 0 :(得分:3)

根据那个帖子,

https://github.com/aspnet/Mvc/issues/3003

似乎目前DisplayNameFor仍然存在,并且没有适用于您的解决方案的Tag Helper。

他们经常提到<label asp-for="blabla"></label>,但这不一样。

答案 1 :(得分:3)

Tag Helpers是MVC中的一项新功能,可用于生成HTML。语法与HTML相同,但由服务器上的Razor处理。 Tag Helpers在很多方面都是Html Helper方法的替代语法,但是它们也提供了一些使用辅助方法很难或不可能完成的功能。

您可以找到一些比较:https://docs.asp.net/en/latest/mvc/views/tag-helpers/intro.html#tag-helpers-compared-to-html-helpers

您可以获取Tag Helpers的更多详细信息:https://dannyvanderkraan.wordpress.com/2016/04/19/asp-net-core-1-0-goodbye-html-helpers-and-hello-taghelpers/

答案 2 :(得分:3)

并非每个Html帮助程序都有一个等效的Tag帮助程序。例如,@Html.DisplayNameFor(m => m.Property)@Html.EditorForModel()没有等效的标记助手。这是有道理的,因为@Html.DisplayNameFor(m => m.Property)@Html.EditorForModel()并没有真正输出HTML标记。

因此,如果有等效的话,请使用Tag助手支持Html助手。否则,请使用Html助手。

我不认为@Html.DisplayNameFor(m => m.Property)会被标记为已弃用(任何其他显示模板或编辑器模板也不会被标记为@Html.EditorForModel())。这些将继续在ASP.NET Core中使用。

此外,您可能对此线程感兴趣的TagHelper等效于Html.DisplayNameFor:https://github.com/aspnet/Mvc/issues/2387

答案 3 :(得分:2)

我认为标签助手是可行的方式,它更具可读性,更清晰,可用于创建更复杂的标签,模拟Web表单中的用户控件日

答案 4 :(得分:0)

以下代码可用于收集

@model IEnumerable<EmployeeViewModel>;

<table>
<tr>
    <th><label asp-for="ToList().First().Id"></label></th>
    <th><label asp-for="ToList().First().Name"></label></th>
</tr>

@foreach (var item in Model)
{
    <tr>
        <td>@item.Id</td>
        <td>>@item.Name</td>
    </tr>
}
</table>