asp.net - 在 ASP.NET Core MVC 中嵌套 TagHelper


ASP.NET 核心 TagHelper documentation给出以下示例:

C# 全选
public class WebsiteContext
{
    public Version Version { get; set; }
    public int CopyrightYear { get; set; }
    public bool Approved { get; set; }
    public int TagsToShow { get; set; }
}

[TargetElement("website-information")]
public class WebsiteInformationTagHelper : TagHelper
{
    public WebsiteContext Info { get; set; }

    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        output.TagName = "section";
        output.Content.SetContent(
            $@"<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;
    }
}

然后可以在您的 Razor .cshtml 中使用它,如下所示:

HTML 全选
<website-information info="new WebsiteContext {
    Version = new Version(1, 3),
    CopyrightYear = 1790,
    Approved = true,
    TagsToShow = 131 }"/>

这将生成以下 HTML:

HTML 全选
<section>
    <ul>
        <li><strong>Version:</strong> 1.3</li>
        <li><strong>Copyright Year:</strong> 1790</li>
        <li><strong>Approved:</strong> true</li>
        <li><strong>Number of tags to show:</strong> 131 </li>
    </ul>
</section>

这是非常丑陋的标签助手语法。有什么方法可以嵌套另一个标签助手并获得完整的智能感知,以便网站信息的唯一允许子项可以是上下文?请参阅下面的示例:

HTML 全选
<website-information>
    <context version="1.3" copyright="1790" approved tags-to-show="131"/>
</website-information>

在我的用例中,网站信息元素已经有很多属性,我想添加一个 或更多 单独的嵌套元素。

最佳答案

您当然可以嵌套标签助手,尽管其他选项(如 View 组件、部分 View 或显示模板)可能更适合 OP 描述的场景。

这可能是一个非常简单的 child 标签助手:

C# 全选
[HtmlTargetElement("child-tag", ParentTag="parent-tag")]
public class ChildTagHelper : TagHelper
{
    public string Message { get; set; }

    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        // Create parent div
        output.TagName = "span";
        output.Content.SetContent(Message);
        output.TagMode = TagMode.StartTagAndEndTag;     
    }
}

这也可能是另一个简单的 家长 标签助手:

C# 全选
[HtmlTargetElement("parent-tag")]
[RestrictChildren("child-tag")]
public class ParentTagHelper: TagHelper
{
    public string Title { get; set; }

    public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
    {            
        output.TagName = "div";

        // Add some specific parent helper html
        var header = new TagBuilder("h1");
        header.Attributes.Add("class", "parent-title");
        header.InnerHtml.Append(this.Title);
        output.PreContent.SetContent(header);

        // Set the inner contents of this helper(Will process any nested tag helpers or any other piece of razor code)
        output.Content.SetContent(await output.GetChildContentAsync());            
    }
}

在 Razor View 中,您可以编写以下内容:

HTML 全选
<parent-tag title="My Title">
    <child-tag message="This is the nested tag helper" />
</parent-tag>

这将呈现为:

XML 全选
<div>
    <h1 class="parent-title">My Title</h1>
    <span>This is the nested tag helper</span>
</div>

您可以 可选 强制标签助手以特定方式嵌套:

  • 使用 [RestrictChildren("child-tag", "another-tag")]在父标签助手中限制允许的嵌套标签助手
  • 使用 ParentTag声明子标签助手以强制将标签嵌套在特定父标签中时的参数[HtmlTargetElement("child-tag", ParentTag = "parent-tag")]\

原文: https://stackoverflow.com/questions/32692857/nesting-taghelpers-in-asp-net-core-mvc

 

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
管理员
上一篇:asp.net mvc Action直接返回图片不被浏览器缓存
下一篇:ASP.NET Core 标记帮助程序(TagHelper)数据列表支持,循环数据
评论列表

发表评论

评论内容
昵称:
关联文章

asp.net - ASP.NET Core MVC 嵌套 TagHelper
ASP.NET MVCASP.NET Core MVC获取当前URL/Controller/Action
ASP.NET Core MVC 过滤器ActionFilter保存页面的生成的html静态页面文件
asp.net TagHelper根据条件向元素添加class
ASP.NET Core MVC的路由约束
asp.net core mvc修改cshtml试图热加载动态更新
ASP.NET Core 标记帮助程序(TagHelper)数据列表支持,循环数据
ASP.NET Core web API使用Swagger/OpenAPI(Swashbuckle)
asp.net core MVC路由添加.html伪静态url时报错
ASP.NET MVC快速入门(一)
【推荐】Razor文件编译 ASP.NET Core
.net core MVC页面源码文件文被编码
ASP.NET Core官网教程,资料查找
ASP.NET Core 读取Post Request.Body 的正确姿势
C# ASP.NET Core开发学生信息管理系统(一)
Vue 3 嵌套数据源且需要过滤内部数据源
C# ASP.NET Core开发学生信息管理系统(三)
.NET Core MVC中间件使用记录日志
ASP.NET Core 使用 LESS
从数据库或者其他位置加载ASP.NET MVC Views 视图 数据库中加载 cshtml

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码