在我看来,自beta7起,TagBuilder中发生了重大的重大更改,但在公告 repo 中未提及这些更改。
特别是.ToString不再呈现tagbuilder,它仅返回类型的名称。
以前,我们可以在HtmlHelper扩展中执行以下操作来构建嵌套的html元素:
var li = new TagBuilder("li");
li.AddCssClass("inactive");
var span = new TagBuilder("span");
span.SetInnerText(somestring);
li.InnerHtml = span.ToString();
.InnerHtml现在不再接受字符串,因为它现在是IHtmlContent
但是由于.ToString()不呈现标记,因此也不起作用:
li.InnerHtml = new HtmlString(span.ToString())
它仅将类型名称呈现为“Microsoft.AspNet.Mvc.Rendering.TagBuilder”。
我没有在TagBuilder上看到任何新方法来提供所需的功能。
我想念什么?现在如何使用TagBuilder构建复杂的嵌套html?
最佳答案
由于TagBuilder
现在实现了IHtmlContent
,因此您应该可以直接使用它,而无需执行.ToString()
。
var li = new TagBuilder("li");
li.AddCssClass("inactive");
var span = new TagBuilder("span");
span.SetInnerText(somestring);
li.InnerHtml = span;
当前版本 Beta 7 中实现的真正问题是,没有简单的方法可以将两个子标记构建器内容附加到父项。您可以关注有关GitHub的讨论。
当前的建议是使
InnerHtml
不可分配,但支持Append
。目标是在 Beta 8 中实现。Beta 7 中的解决方法是使用
parent.WriteTo
调用StringWriter
将其转换为string
。