具有干净输出的ASP.NET HTML控件?

att*_*ack 4 html asp.net stringbuilder

我正在开发一个ASP.NET Web应用程序,我一直在遇到同样的问题:

有时我想从代码隐藏中将HTML写入页面.例如,我有一个页面,Editor.aspx,输出根据GET变量的值"视图"而变化.换句话说,"Editor.aspx?view = apples"输出的HTML不同于"Editor.aspx?view = oranges".

我目前用StringBuilder输出这个HTML.例如,如果我想创建一个列表,我可能会使用以下语法:

myStringBuilder.AppendLine("<ul id=\"editor-menu\">");
myStringBuilder.AppendLine("<li>List Item 1</li>");
myStringBuilder.AppendLine("</ul>");
Run Code Online (Sandbox Code Playgroud)

问题是我宁愿使用ASP.NET的List控件来实现这个目的,因为几行StringBuilder语法妨碍了我的代码的可读性.但是,ASP.NET控件倾向于输出复杂的HTML,具有唯一的ID,内联样式以及偶尔的内联JavaScript块.

我的问题是,是否有一个ASP.NET控件只代表一个通用的HTML标签?换句话说,是否存在类似以下示例的控件:

HTMLTagControl list = new HTMLTagControl("ul");
list.ID = "editor-menu";
HTMLTagControl listItem = new HTMLTagControl("li");
listItem.Text = "List Item 1";
list.AppendChild(listItem);
Run Code Online (Sandbox Code Playgroud)

我知道有包装器等等,但我宁愿从简化开始,而不是驯服ASP.NET的复杂性.

Jos*_*osh 8

是否有一个ASP.NET控件,它只代表一个通用的HTML标签?

是的,它被称为HtmlGenericControl :)

至于你想要的不是什么,但你可以很容易地解决它:

HtmlGenericControl list = new HtmlGenericControl("ul");
list.ID = "editor-menu";
HtmlGenericControl listItem = new HtmlGenericControl("li");
listItem.InnerText = "List Item 1";
list.Controls.Add(listItem);
Run Code Online (Sandbox Code Playgroud)

如果你真的需要了解裸机,那么你应该使用HtmlTextWriter类而不是StringBuilder,因为它更适合于抽出原始HTML.