【问题标题】:Taghelper problems with rendering output.precontent using Tagbuilder and stringbuilderTaghelper 使用 Tagbuilder 和 stringbuilder 渲染 output.precontent 的问题
【发布时间】:2016-05-20 03:55:21
【问题描述】:

我已经尝试了这两种不同的方法..在论坛上也不是很多。

我正在尝试创建一个自定义 taghelper,随着我的前进慢慢构建它。它会生成一个动态菜单,但是我没有从字符串生成器获得正确的输出。

我正在尝试为 precontent 制作这个:

        <div class="navbar-collapse collapse">
            <ul class="nav navbar-nav">

这用于发布内容:

            </ul>
        </div>

我打算将其添加为 output.precontent 和 output.postcontent。我还决定对每个标签使用标签构建器方法,并将它们添加到字符串构建器中,最终将其呈现为上述预内容。这就是我想出的。

        StringBuilder PreContentSb = new StringBuilder();

        StringBuilder PostContentSb = new StringBuilder();

        TagBuilder divTag = new TagBuilder("div");
        TagBuilder ul = new TagBuilder("ul");

        divTag.MergeAttribute("class", "navbar - collapse collapse");
        divTag.TagRenderMode = TagRenderMode.SelfClosing;

        ul.MergeAttribute("class", "nav navbar - nav");
        ul.TagRenderMode = TagRenderMode.SelfClosing;

        PreContentSb.Append(' ', 12);
        PreContentSb.Append(divTag.InnerHtml.ToString());
        PreContentSb.Append(Environment.NewLine);
        PreContentSb.Append(' ', 16);
        PreContentSb.Append(ul.ToString());
        PreContentSb.Append(Environment.NewLine);

        output.PreContent.SetContent(PreContentSb.ToString());

        PostContentSb.Append(' ', 16);
        PostContentSb.Append("</ul>");
        PreContentSb.Append(Environment.NewLine);
        PostContentSb.Append(' ', 12);
        PostContentSb.AppendLine("</div>");
        PreContentSb.Append(Environment.NewLine);

        output.PostContent.SetContent(PostContentSb.ToString());

taghelper 只在一个地方,所以我想我会缩进那个地方,例如“PreContentSb.Append(' ', 12);”..

我得到的问题是,当我查看页面源时,我得到的这些标签如下:

          Microsoft.Extensions.Internal.BufferedHtmlContent&#xD;&#xA;                Microsoft.AspNet.Mvc.Rendering.TagBuilder&#xD;&#xA;                &lt;/ul&gt;            &lt;/div&gt;&#xD;&#xA;

首先它根本不渲染标签构建的标签,其次它不是用引号和尖括号来显示实际的字符实体引用..

如何简单地显示反逗号、尖括号?

最后如何在 stringbuilder 中渲染 tagbuilder 元素?

【问题讨论】:

    标签: asp.net-core asp.net-core-mvc


    【解决方案1】:
    1. TagBuilder 没有对 ToString() 的覆盖。您必须使用 WriteTo() 来编写它的内容(即 TextWriter)。

    2. 为防止转义,您必须返回 HtmlString。检查我的回答here,了解如何返回模板引擎未编码的字符串。这个例子是关于属性的,但它应该让你知道如何去做,即output.PostContent.SetContent(new HtmlString(PostContentSb.ToString()));

    【讨论】:

    • 快速问题 - 如何使用 WriteTo() 将 TagBuilder 的内容添加到 stringbuilder? (将对此投票)
    • var writer = new System.IO.StringWriter(); divTag.WriteTo(writer, new HtmlEncoder()); var s = writer.ToString();
    猜你喜欢
    • 1970-01-01
    • 2021-12-04
    • 2018-09-25
    • 2014-01-27
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多