标记 帮助程序是什么
标记 帮助程序使服务器端代码 可以在 Razor 文件 中参与创建和呈现 HTML 元素。 例如,内置的 ImageTagHelper
可以将版本号追加到图片 名称 。 每当图片 发生变化时,服务器都会为图像生成 一个新的唯一版本号,因此客户端总能获得当前图像(而不是过时的缓存图像)。
作者:依乐祝
原文链接 :https://www.cnblogs.com/yilezhu/p/13197922.html
标记 帮助程序的作用域是如何控制的
标记 帮助程序作用域由 @addTagHelper
、@removeTagHelper
和“!”选择退出 字符等联合控制。下面就一一的进行相关的介绍吧。
使用 @addTagHelper
添加 标记 帮助程序
@addTagHelper
指令让视图可以使用标记 帮助程序。 在这种情况下,视图文件 是_pages/ViewImports ,默认情况下,它由_pages_文件 夹和子文件 夹中的所有文件 继承,这使得标记 帮助程序可用。 这里公开标记 帮助程序有两种方式,如下所示: 第一种:使用通配 符语法(" * ")指定指定程序集(AspNetCore )中的所有标记 帮助程序都可用于_Views_目录及其子目录中的每个视图文件 。
@addTagHelper *,Microsoft.AspNetCore.Mvc.TagHelpers
第二种:使用标记 帮助程序的完全限定名,添加 某个特定的标记 帮助程序。
@addTagHelper AuthoringTagHelpers.TagHelpers.EmailTagHelper,AuthoringTagHelpers
说明:@addTagHelper
后第一个参数指定要加载的标记 帮助程序(我们使用“*”指定加载所有标记 帮助程序),第二个参数“Microsoft.AspNetCore.Mvc.TagHelpers”指定包含标记 帮助程序的程序集。
注:Microsoft.AspNetCore.Mvc.TagHelpers 是内置 ASP.NET Core 标记 帮助程序的程序集。
@removeTagHelper
删除 标记 帮助程序
@removeTagHelper
与 @addTagHelper
具有相同的两个参数,它会删除 之前添加 的标记 帮助程序。 例如,应用于特定视图的 @removeTagHelper
会删除 该视图中的指定标记 帮助程序。 在 Views/Folder/_ViewImports.cshtml 文件 中使用 @removeTagHelper
,将从 Folder 中的所有视图删除 指定的标记 帮助程序。
使用 _ViewImports.cshtml
文件 控制标记 帮助程序作用域
可将 _ViewImports.cshtml 添加 到任何视图文件 夹,视图引擎将同时应用该文件 和 Views/_ViewImports.cshtml 文件 中的指令。
说明:
如果为 Home 视图添加 空的 Views/Home/_ViewImports.cshtml 文件 ,则不会发生任何更改,因为 _ViewImports.cshtml 文件 是附加的。
添加 到 Views/Home/_ViewImports.cshtml 文件 (不在默认 Views/_ViewImports.cshtml 文件 中)的任何 @addTagHelper
指令,都只会将这些标记 帮助程序公开给 Home 文件 夹中的视图。
选择退出 字符(“!”)元素级别退出 标记 帮助程序
使用标记 帮助程序选择退出 字符(“!”),可在元素级别禁用标记 帮助程序。 例如,使用标记 帮助程序选择退出 字符在 <span>
中禁用 Email
验证:
<!span asp-validation-for="Email" class="text-danger"></!span>
说明:
须将标记 帮助程序选择退出 字符应用于开始和结束标记 。 (将选择退出 字符添加 到开始标记 时,Visual Studio 编辑器会自动 为结束标记 添加 相应字符)。
添加 选择退出 字符后,元素和标记 帮助程序属性 不再以独特字体显示 。
使用 @tagHelperPrefix
阐明标记 帮助程序用途
@tagHelperPrefix
指令可指定一个标记 前缀字符串,以启用标记 帮助程序支持 并阐明标记 帮助程序用途。 例如,可以将以下标记 添加 到 Views/_ViewImports.cshtml 文件 :
@tagHelperPrefix th:
在以下代码 图像中,标记 帮助程序前缀设置为 th:
,所以只有使用前缀 th:
的元素才支持 标记 帮助程序(可使用标记 帮助程序的元素以独特字体显示 )。 <label>
和 <input>
元素具有标记 帮助程序前缀,可使用标记 帮助程序,而 <span>
元素则相反。
适用于 @addTagHelper
的层次结构规则也适用于 @tagHelperPrefix
。
标记 帮助程序的 Intellisense 支持
在 Visual Studio 中创建新的 ASP.NET Core web 应用时,它将添加 AspNetCore Razor
的NuGet 包 。它 是添加 标记 帮助程序的工具包。 假设编写 HTML <label>
元素。 只要在 Visual Studio 编辑器中输入 <l
,IntelliSense 就会显示 匹配的元素:
不仅会获得 HTML 帮助,还会有图标(下方带有“<>”的“@" symbol with ")
将该元素标识为
标记 帮助程序的目标。 纯 HTML 元素(如 `fieldset`)
显示 “<>”图标。
纯 HTML `
` 标记 以棕色字体显示 HTML 标记 (使用默认 Visual Studio 颜色主题 时),以红色字体显示 属性 ,并以蓝色字体显示 属性 值。
输入 <label
后,IntelliSense 会列出可用的 HTML/CSS 属性 和以标记 帮助程序为目标的属性 :
通过 IntelliSense 语句完成功能 ,按 Tab 键即可用选择的值完成语句:
只要输入标记 帮助程序属性 ,标记 和属性 字体就会更改。 如果使用默认的 Visual Studio “蓝色”或“浅色”颜色主题 ,则字体是粗体紫色。 如果使用“深色”主题 ,则字体为粗体青色。 本文档中的图像在使用默认主题 时截取 的。
可在双引号 ("") 内输入 Visual Studio CompleteWord 快捷方式(默认值为 Ctrl+空格键),即可使用 C#,就像在 C# 类中一样。IntelliSense 会显示 页面 模型上的所有方法 和属性 。 由于属性 类型是 ModelExpression
,所以这些方法 和属性 可用。 在下图中,我正在编辑 Register
视图,所以 Registerviewmode l
是可用的。
IntelliSense 会列出页面 上模型可用的属性 和方法 。 丰富 IntelliSense 环境可帮助选择 CSS 类:
可以从 "工具 " "选项" "环境" " > Options > Environment > 字体和颜色 " 中自定义 字体和着色:
实例演示如何在ASP.NET Core中创建标记 帮助程序
标记 帮助程序是实现 ITagHelper
接口的任何类。 但是,在创作标记 帮助程序时,通常从 TagHelper
派生,这样可以访问 Process
方法 。
创建一个名为 AuthoringTagHelpers 的新 ASP.NET Core 项目。注: 此项目不需要身份验证。
创建一个名为“TagHelpers”的文件 夹来保存标记 帮助程序。注: TagHelpers
文件 夹不是必需的,但它是合理的约定。
现在让我们开始编写一些简单的标记 帮助程序。
EmailTagHelper
标记 帮助程序
如果你正在编写博客 引擎,并且需要它将营销、支持 和其他联系人的电子邮件 全部发送到同一个域,则可能需要这样的一个标记 帮助程序。 如下所示,先上代码 :
using Microsoft.AspNetCore.Razor.TagHelpers;
using System.Threading.Tasks;
namespace AuthoringTagHelpers.TagHelpers
{
public class EmailTagHelper : TagHelper
{
public override Task ProcessAsync(TagHelperContext context,TagHelperOutput output)
{
output.TagName = "a"; // Replaces <email> with <a> tag
var address = MailTo + "@" + EmailDomain;
output.Attributes.SetAttribute("href","mailto:" + address);
output.Content.SetContent(address);
return Task.CompletedTask;
}
}
}
说明:
标记 帮助程序使用面向根类名称 的元素的命名约定(减去类名称 的 TagHelper 部分)。 在此示例中, EmailTagHelper 的根名称 为_email_,因此 <email>
标记 将针对。
EmailTagHelper
类从 TagHelper
派生。 TagHelper
类提供编写标记 帮助程序的方法 和属性 。
重写的 ProcessAsync
方法 控制标记 帮助程序在执行时的操作。 TagHelper
类还提供具有相同参数的同步版本 (Process
)。
类名称 的后缀是 TagHelper,这不是必需的,但被认为是约定的最佳做法。 可将类声明为:public class Email : TagHelper
标记 帮助程序采用 Pascal 大小写格式的类和属性 名将转换为各自相应的短横线格式。 因此,要使用 MailTo
属性 ,请使用 <email mail-to="value"/>
等效项。
最后一行为EmailTagHelper
标记 帮助程序设置已完成的内容 。
SetAttribute
是添加 属性 的语法,只要属性 集合中当前不存在 href
属性 ,该方法 就适用于此属性 。
接下来然我们在Razor页面 上应用此标记 帮助程序吧。 使用以下更改更新 Views/Home/Contact.cshtml 文件 中的标记 :
@using AuthoringTagHelpers
@addTagHelper *,Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper AuthoringTagHelpers.TagHelpers.EmailTagHelper,AuthoringTagHelpers
@{
ViewData["Title"] = "Contact Copy";
}
<h2>@ViewData["Title"].</h2>
<h3>@ViewData["Message"]</h3>
<address>
One Microsoft Way Copy Version <br />
Redmond,WA 98052-6399<br />
<abbr title="Phone">P:</abbr>
425.555.0100
</address>
<address>
<strong>Support:</strong><email mail-to="Support"></email><br />
<strong>Marketing:</strong><email mail-to="Marketing"></email>
</address>
说明:
开头的 @addTagHelper
是添加 对应的标记 帮助程序引用,文章 开头已经进行了相关阐述
第18,19行代码 标记 引用了我们上面编写的 EmailTagHelper
标记 帮助程序。
mail-to
属性 是标记 帮助程序采用 Pascal 大小写格式的类和属性 名将转换为各自相应的短横线格式。 因此,要使用 MailTo 属性 ,必须使用 的等效项。
这时候运行下程序,可以看到生成 对应的html标签 了:
<a href="mailto:Support@contoso.com">Support@contoso.com</a>
<a href="mailto:Marketing@contoso.com">Marketing@contoso.com</a>
在标记 帮助程序中使用实体模型
添加 “Models”文件 夹**。
将以下 WebsiteContext
类添加 到“模型”文件 夹:
using System;
namespace AuthoringTagHelpers.Models
{
public class WebsiteContext
{
public Version Version { get; set; }
public int CopyrightYear { get; set; }
public bool Approved { get; set; }
public int TagsToShow { get; set; }
}
}
将以下 WebsiteInformationTagHelper
类添加 到“TagHelpers”文件 夹。
using System;
using AuthoringTagHelpers.Models;
using Microsoft.AspNetCore.Razor.TagHelpers;
namespace AuthoringTagHelpers.TagHelpers
{
public class WebsiteInformationTagHelper : TagHelper
{
public WebsiteContext Info { get; set; }
public override void Process(TagHelperContext context,TagHelperOutput output)
{
output.TagName = "section";
output.Content.SetHtmlContent(
$@"<ul><li><strong>Version:</strong> {Info.Version}</li>
<li><strong>Copyright Year:</strong> {Info.CopyrightYear}</li>
<li><strong>Approved:</strong> {Info.Approved}</li>
<li><strong>Number of tags to show:</strong> {Info.TagsToShow}</li></ul>");
output.TagMode = TagMode.StartTagAndEndTag;
}
}
}
将以下标记 添加 到 About.cshtml 视图**。 突出显示 的标记 显示 Web 站点 信息。
@using AuthoringTagHelpers.Models
@{
ViewData["Title"] = "About";
WebsiteContext webContext = new WebsiteContext {
Version = new Version(1,3),CopyrightYear = 1638,Approved = true,TagsToShow = 131 };
}
<h2>@ViewData["Title"].</h2>
<h3>@ViewData["Message"]</h3>
<p bold>Use this area to provide additional information.</p>
<bold> Is this bold?</bold>
<h3> web site info </h3>
<website-information info="webContext" />
说明:
在下面的Razor显示 的标记 中:<website-information info="webContext" />
Razor知道 info 属性 是一个类,而不是字符串,并且您想要编写 c # 代码 。 编写任何非字符串标记 帮助程序属性 时,都不应使用 @ 字符。
运行应用,并导航到“关于”视图即可查看 Web 站点 信息。
总结
本文首先带着大家回顾了一下标记 帮助程序的一些概念,接着给大家介绍了标记 帮助程序作用域的注意事项来为接下来的实例演练做准备。然后给大家介绍了标记 帮助程序强大的 Intellisense
支持 ,让我们在开发中事半功倍,如虎添翼!最后就是通过实例代码 来做两个标记 帮助程序的小例子加深我们的理解。希望对大家有所帮助! 接下来我会介绍下微软官方提供的一些常用标记 帮助程序,有兴趣的朋友可以关注下。 参考文档:
https://docs.microsoft.com/zh-cn/aspnet/core/mvc/views/tag-helpers/intro?view=aspnetcore-3.1
https://docs.microsoft.com/zh-cn/aspnet/core/mvc/views/tag-helpers/authoring?view=aspnetcore-3.1