asp-for在幕后做什么?

时间:2019-07-12 04:50:01

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

我在.cshtml文件中有以下代码:

<label asp-for="Email">Your email:</label>

解析后,幕后发生了什么?

我可以看到asp-for实际上在呼叫Microsoft.AspNetCore.Mvc.TagHelpers.LabelTagHelper.For

但是IHtmlGenerator的哪种实现传递给LabelTagHelper构造函数?

在.NET控制台应用程序中,我只需在ILSpy中打开.exe即可查看发生了什么。

如何为Asp.net Core应用执行相同的操作?

1 个答案:

答案 0 :(得分:0)

您可以查看LableTagHelper源代码:

https://github.com/aspnet/AspNetCore/blob/master/src/Mvc/Mvc.TagHelpers/src/LabelTagHelper.cs

IHtmlGenerator传递给构造函数并生成标签

var tagBuilder = Generator.GenerateLabel(
            ViewContext,
            For.ModelExplorer,
            For.Name,
            labelText: null,
            htmlAttributes: null);

更新:

默认的Asp.net Core MVC尽可能避免直接依赖。Asp.netCore MVC无需硬编码IHtmlGenerator接口的实现,而是加载在应用程序初始化期间注入依赖的实现。视图引擎在创建IHtmlHelper的接口时,会通过构造函数传递IHtmlGenerator实例。

请参阅here