4

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

有时我想从代码隐藏将 HTML 写入页面。例如,我有一个页面 Editor.aspx,其输出取决于 GET 变量“view”的值。换句话说,“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>");

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

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

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

我知道有包装器之类的,但与其驯服 ASP.NET 的复杂性,我宁愿从一开始就从简单性开始。

4

3 回答 3

8

是否有仅代表通用 HTML 标记的 ASP.NET 控件?

是的,它被称为HtmlGenericControl :)

至于你想要什么,但你可以轻松解决它:

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

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

于 2009-08-10T02:40:56.097 回答
2

如果您只想将 stringbuilder 的结果分配给空白控件,则可以<asp:Literal />为此使用控件。

于 2009-08-10T03:43:48.297 回答
1

LiteralControl 具有可以传递 html 的构造器……我认为它更好。

新的 LiteralControl(sb.ToString());

于 2009-08-26T07:41:07.633 回答