asp.net-core-mvc - 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 应用程序做同样的事情?
解决方案
您可以查看 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
构造函数传递实例。
参考这里
推荐阅读
- laravel - 一张桌子有多个型号可以吗
- sql - 如何在不分组的情况下获得一列窗口平均值?
- visual-studio-2017 - 有没有办法用 CTRL+[NUMBER] 而不是 CTRL+TAB 切换选项卡?
- javascript - index.html 可以播放音频文件吗?如果是这样,我怎样才能实现它在后台自动播放?
- java - 如何使用 Java 从 API 中检索信息?
- c - 来自c中typedef定义的指针的不兼容类型
- java - 如何使用毕加索上传和检索图像
- c# - 将 FSharpFun 从 C# 传递到 F#
- javascript - 创建取消按钮...如何在 Node/Express.js 中完全中止请求
- azure - Azure:如何在不重新启动应用服务的情况下重新加载环境变量