2009-08-10 52 views
4

我正在開發一個ASP.NET web應用程序,並且我一直在遇到同樣的問題:清潔輸出的ASP.NET HTML控件?

有時我想從代碼隱藏中將HTML寫入頁面。例如,我有一個頁面Editor.aspx,其輸出根據GET變量的值「view」而變化。換句話說,「Editor.aspx?view = apples」輸出與「Editor.aspx?view = oranges」不同的HTML。

我目前用StringBuilder輸出這個HTML。例如,如果我想創建一個列表,我可能會使用以下語法:

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

的問題是,我寧願使用ASP.NET的列表控件用於此目的,因爲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的複雜性,我寧願用簡單從一開始就開始。

回答

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。

+0

感謝您的HtmlTextWriter提示。 「輕鬆繞開」是什麼意思? – attack 2009-08-10 02:52:25

+0

我已經添加了一個代碼示例來展示我的意思。基本上你只需要使用正確的屬性就是我的意思。另外,如果你真的想要對輸出進行絕對控制,那麼使用HtmlTextWriter,因爲這是所有控件最終在Render()方法中使用的。它確實有一些學習曲線。 – Josh 2009-08-10 02:55:48

2

如果您只想將stringbuilder的結果分配給空白控件,則可以使用<asp:Literal />控件。

1

LiteralControl有約束,你可以通過你的html ... 我認爲這是更好的。

new LiteralControl(sb.ToString());