2008-10-29 2 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. Недостатком является то, что в тексте у вас есть : a 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), и определить, какой элемент управления нужно создать, и какие атрибуты ему нужны. Но это было бы очень ... зло в письме.

Почему именно вам это нужно, чтобы быть «правильным» контролем, а не текстом внутри элемента управления Literal?

+0

Код, который я должен использовать (и, к сожалению, не могу изменить), предназначен для заполнения PlaceHolder некоторыми объектами HTMLControl, а позже он проверяет эти элементы и делает некоторые вещи на основе этого. К сожалению, у меня есть только содержимое HTML-содержимого PlaceHolder, поэтому мне нужно его воссоздать. – 2008-10-29 21:25:29

Смежные вопросы