2008-10-29 103 views
3

ASP.NET中有可能採用包含某些HTML的字符串並使ASP.NET解析它併爲我創建一個控件?例如:ASP.NET將原始HTML解析爲控件

string rawHTML = "<table><td><td>Cell</td></tr></table>"; 
HTMLTable table = MagicClass.ParseTable(rawHTML); 

我知道,這是一個壞的事情,但我在不幸的情況,這是真的,我可以實現我需要什麼(我不能修改這個特殊的同事的代碼)的唯一途徑。

而且,我知道LiteralControl可以讓你有與它任意的HTML控件,但不幸的是我需要讓他們轉換成適當的控制。

不幸的是,HTMLTable不支持InnerHTML屬性。我需要完全保留HTML樹,所以我不能將它放到<div>標記中。

謝謝。

回答

7

我認爲你會得到最接近的是Page.ParseControl,這是ASP.NET分析器。缺點是你有的文本是 LiteralControl,因爲它沒有runat =「server」 - 所以你會事先做一個非常小的字符串操作。

。換句話說:

this.ParseControl("<table><tr><td>Cell</td></tr></table>") 

會產生:

Control 
LiteralControl 

而:

this.ParseControl("<table runat=\"server\"><tr><td>Cell</td></tr></table>") 

會產生:

Control 
HtmlTable 
    HtmlTableRow 
    HtmlTableCell 
    LiteralControl 
+0

這對我來說似乎超級怪異,但我不得不說,我很愛它。從來沒有聽說過,但恰好正是我現在需要的。 – trnelson 2015-05-08 13:32:15

0

你可以遍歷HTML字符串令牌在一個時間(令牌這裏被定義爲HTML元素或HTML的innerText),並確定哪些控制需要被實例化,哪些屬性需要。但是,這將是高度的......寫作中的邪惡。

爲什麼你需要它是一個「正確的」控制而不是文字控制中的文本?

+0

我必須使用的代碼(不幸的是無法修改)是爲了用一些HTMLControl對象填充PlaceHolder,並且稍後會檢查這些元素並根據這些元素做一些事情。不幸的是,我只有PlaceHolder的原始HTML內容,所以我需要重新創建它。 – 2008-10-29 21:25:29