我一直关注这篇关于编写自定义Tag Helpers
here的微软文章.
示例(取自上面的链接)
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; }
而不是这样做,有没有办法从cshtml文件加载标记模板? (类似于加载部分视图)
我的目的是拥有单独的cshtml文件(每个元素类型一个),这样我就可以轻松地设置它们的样式.我的C#看起来也很干净!
谢谢,
詹姆士
解决方法
您可以创建局部视图,并从TagHelper类中调用它.例如:
<!-- Views/Shared/TagHelpers/MyList.cshtml --> @model YourInfoClass <ul> <li><strong>Version:</strong> @Model.Version</li> <li><strong>copyright Year:</strong> @Model.copyrightYear</li> <li><strong>Approved:</strong> @Model.Approved</li> <li><strong>Number of tags to show:</strong> @Model.TagsToShow</li> </ul>
在你的TagHelper中:
[HtmlTargetElement("mylist")] public class MyListTagHelper : TagHelper { private HtmlHelper _htmlHelper; private HtmlEncoder _htmlEncoder; public MyListTagHelper(IHtmlHelper htmlHelper,HtmlEncoder htmlEncoder) { _htmlHelper = htmlHelper as HtmlHelper; _htmlEncoder = htmlEncoder; } public override async Task ProcessAsync(TagHelperContext context,TagHelperOutput output) { output.TagName = "section"; output.TagMode = TagMode.StartTagAndEndTag; var partial = await _htmlHelper.PartialAsync("TagHelpers/MyList",Info); var writer = new StringWriter(); partial.Writeto(writer,_htmlEncoder); output.Content.SetHtmlContent(writer.ToString()); } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。