【问题标题】:How to build HTML from Code in C#如何从 C# 中的代码构建 HTML
【发布时间】:2015-07-24 13:39:04
【问题描述】:
我需要在我的 MVC 应用程序中创建一个 HtmlHelper,它呈现出一些嵌套且相当复杂的 UL/LI(树状)结构。 HtmlTextWriter 和 XmlTestWriter 类提供了构造正确 HTML 的方法,但它们是只向前的,因此使我的工作变得相当困难,因为在您呈现标签后,您没有对“父”标签的引用。
XDocument 和 XElement 类是我查看的下一个候选对象,但它们是为 XML 而不是为 HTML 创建的,这可能会导致 no-so-valid HTML (self -关闭标签等)。
我该怎么办?
This alleged duplicate 并不是真正的重复,根本不回答我的问题。它是关于构建一个呈现单个 Html-Tag 的 HTML-Helper。这不是我所追求的。我想知道如何用 C# 代码构建整个 DOM。
【问题讨论】:
标签:
c#
html
asp.net-mvc
dom
【解决方案2】:
如果我要这样做,我会以这样的方式(简化):
物品类别
public class HtmlListItem
{
public string Content { get; set; }
public object HtmlAttributes { get; set; }
}
HTML 助手
public HtmlString RenderList(this HtmlHelper htmlHelper, IEnumerable<HtmlListItem> list, object uListHtmlAttributes)
{
TagBuilder ul = new Tagbuilder("ul");
IDictionary<string, object> uListAttributes = new RouteValueDictionary(uListHtmlAttributes);
ul.MergeAttributes(uListAttributes);
StringBuilder builder = new StringBuilder();
builder.Append(ul.ToString(TagRenderMode.StartTag) + Environment.NewLine);
foreach (var item in list)
{
TagBuilder hold = new TagBuilder("li");
IDictionary<string, object> htmlAttributes = new RouteValueDictionary(item.HtmlAttributes);
hold.MergeAttributes(htmlAttributes);
hold.InnerHtml = item.Content;
builder.Append(hold.ToString(TagRenderMode.Normal) + Environment.NewLine);
}
builder.Append("</ul>" + Environment.NewLine);
return new HtmlString(builder.ToString());
}