我正在开发一个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>");
问题在于我宁愿使用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);
我知道有包装等等,但我宁愿从一开始就以简单性开始,而不是驯服ASP.NET的复杂性。
答案 0 :(得分: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);
如果你真的需要了解裸机,那么你应该使用HtmlTextWriter类而不是StringBuilder,因为它更适合于抽出原始HTML。
答案 1 :(得分:2)
如果您只想将stringbuilder的结果分配给空白控件,可以使用<asp:Literal />
控件。
答案 2 :(得分:1)
LiteralControl有一个约束器,你可以传递你的HTML ... 我觉得它更好。
new LiteralControl(sb.ToString());