首页 > 解决方案 > asp-for 在幕后做了什么?

问题描述

我在 .cshtml 文件中有这段代码:

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

当它被解析时,幕后发生了什么?

我可以看到asp-for实际上调用Microsoft.AspNetCore.Mvc.TagHelpers.LabelTagHelper.For.

但是IHtmlGenerator传递给LabelTagHelper构造函数的实现是什么?

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

我怎样才能为 Asp.net Core 应用程序做同样的事情?

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

解决方案


您可以查看 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 尽可能避免直接依赖。而不是硬编码IHtmlGenerator接口的实现,Asp.net Core MVC 在应用程序初始化过程中加载依赖注入的实现。当视图引擎创建一个的接口IHtmlHelper,它通过IHtmlGenerator构造函数传递实例。

参考这里


推荐阅读