我尝试过这两种不同的方式..在论坛上也没有很多。
我正在努力创建一个自定义taghelper,在我前进的过程中慢慢构建它。它用于生成动态菜单,但是我没有从字符串生成器获得正确的输出。
我正在尝试为预备内容制作此内容:
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
这对于postcontent:
</ul>
</div>
我打算将它添加为output.precontent和output.postcontent。我还决定对每个标签使用tagbuilder方法,并将它们添加到stringbuilder,最后将其作为前面提到的precontent。这就是我想出来的。
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只会在一个地方进行,所以我想我会缩进那个地方,例如&#34; PreContentSb.Append(&#39;&#39;,12);&#34; ..
我得到的问题是,当我查看页面来源时,我会得到以下标签:
Microsoft.Extensions.Internal.BufferedHtmlContent
 Microsoft.AspNet.Mvc.Rendering.TagBuilder
 </ul> </div>

首先它根本不渲染tagbuilt标签,其次不是引号和尖括号,而是显示实际的Character实体引用。
如何简单地显示引号,尖括号?
最后,如何在stringbuilder中渲染tagbuilder元素?
答案 0 :(得分:1)
TagBuilder
没有覆盖ToString()
。您必须使用WriteTo()
来编写它的内容(即在TextWriter中)。
要防止转义,您必须返回HtmlString
。检查我的答案here,了解如何返回未被模板引擎编码的刺痛。这个例子是关于属性的,但它应该让你知道如何做到这一点,即output.PostContent.SetContent(new HtmlString(PostContentSb.ToString()));