.net core 下的TagHelper自定义新手提醒
Posted yinjing8435
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.net core 下的TagHelper自定义新手提醒相关的知识,希望对你有一定的参考价值。
最近一直在学习.net core 最近刚开始学习Taghelper的自定义。今天我发现了微软官方文档的一个错误,觉得立马要和大家分享出来,免得后边的人和我走一样的弯路
首先这是微软官网关于TagHelper的自定义使用说明链接 https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/authoring 无奈我的英语水平不太好,勉强还能看懂。
在这一章 这一小节 Passing a model to a Tag Helper 的说明中
首先声明了Models 文件夹下声明一个类
1 public class WebsiteContext 2 3 public Version Version get; set; 4 public int CopyrightYear get; set; 5 public bool Approved get; set; 6 public int TagsToShow get; set; 7
接下来他的自定义TagHelper要使用这个类
1 public class WebsiteInformationTagHelper : TagHelper 2 3 public WebsiteContext Info get; set; 4 5 public override void Process(TagHelperContext context, TagHelperOutput output) 6 7 output.TagName = "section"; 8 output.Content.SethtmlContent( 9 $@"<ul><li><strong>Version:</strong> Info.Version</li> 10 <li><strong>Copyright Year:</strong> Info.CopyrightYear</li> 11 <li><strong>Approved:</strong> Info.Approved</li> 12 <li><strong>Number of tags to show:</strong> Info.TagsToShow</li></ul>"); 13 output.TagMode = TagMode.StartTagAndEndTag; 14 15
在接下来在前台他要是用这个TagHelper
1 @using AuthoringTagHelpers.Models 2 @ 3 ViewData["Title"] = "About"; 4 5 <h2>@ViewData["Title"].</h2> 6 <h3>@ViewData["Message"]</h3> 7 8 <p bold>Use this area to provide additional information.</p> 9 10 <bold> Is this bold?</bold> 11 12 <h3> web site info </h3> 13 <website-information info="new WebsiteContext 14 Version = new Version(1, 3), 15 CopyrightYear = 1638, 16 Approved = true, 17 TagsToShow = 131 " />
这个就是他的使用过程 。
如果 按照他的说明这样做完之后你会发现根本不行,浏览器报错 错误很明显 无法将Version类型转化为String类型
好了这里改一下
<Website-Information info="new WebSiteContext Version = new string('1', 3), CopyrightYear = 1638, Approved = true, TagsToShow = 131 " ></Website-Information>
这会测试的时候改完之后就可以直接运行了。原来在改之后还会出现一个错误。 <Website-Information info="......"></Website-Information>会报出无法识别 info这个属性, 给大家分析一下 首先Website-Information这个Tag是原本都没有的,是我们自己定义的。所以它本身也就不存在什么属性,而这里直接使用它的info属性。它肯定无法识别,所以在这里我们需要对其自定义的时候加上这个属性,让编译器能够识别 。
public class WebsiteInfomationTagHelper : TagHelper public WebSiteContext Info get; set; public override void Process(TagHelperContext context, TagHelperOutput output) output.TagName = "section"; //如果说添加的属性不存在用add方法 output.Attributes.Add("info", Info); //添加的属性存在则用setAttribute方法 //output.Attributes.SetAttribute("info", info); 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;
这样进行一番修改之后就可以运行了 这是运行的结果
可能本人才疏学浅。毕竟刚开始学没两天。有什么问题欢迎在评论区评论。我会第一时间进行回复。希望大家一起帮助一起成长。
以上是关于.net core 下的TagHelper自定义新手提醒的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ASP.NET Core 的自定义 TagHelper 中呈现 Razor 模板?
[十一] ASP.NET Core 中的 Taghelper