在我看来,自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

10-06 11:11