Конвертировать строку в WebControls - asp.net - PullRequest
2 голосов
/ 10 августа 2011

Если вы видите следующий код

Table tblTest = (Table)tblControl;
StringBuilder text = new StringBuilder();
StringWriter writer = new StringWriter(text);
HtmlTextWriter htmlWriter = new HtmlTextWriter(writer);
tblTest.RenderControl(htmlWriter);
htmlCode = text.ToString();

, здесь я преобразую объект таблицы в строку.

Я получу вывод как "<table><tr><td>item</td></tr></table>"

Теперь я хочу откатить его.У меня есть строка, и мне нужно преобразовать ее в объект WebControls.Table.Пожалуйста, кто-нибудь предложит какой-нибудь способ.

1 Ответ

1 голос
/ 10 августа 2011

Создайте карту с именем, с которым HtmlControl отображается в элементе управления.Затем вы можете взять отправленную вам строку xml и загрузить ее, используя XDocument.Parse.Оттуда вы можете рекурсивно построить структуру управления.

Dictionary<string, HtmlContainerControl> controlConstructor = new Dictionary<string, HtmlContainerControl>
                                                        {
                                                            {"table", new HtmlTable()},
                                                            {"tr", new HtmlTableRow()},
                                                            {"td", new HtmlTableCell()}
                                                        };
string xml = "<table><tr><td>item</td></tr></table>";
var htmlDoc = XElement.Parse(xml);
Func<XElement, HtmlControl> constructHtmlStructure = null;
constructHtmlStructure = e =>
                            {
                                var control = controlConstructor[e.Name.ToString()];
                                if (e.HasElements)
                                    control.Controls.Add(constructHtmlStructure(e.Elements().Single()));
                                else
                                    control.InnerText = e.Value;
                                return control;
                            };

var structure = constructHtmlStructure(htmlDoc);

Это очень простой старт.Вам нужно что-то гораздо более сложное, чтобы получить все элементы управления.Обратите внимание, что у них есть свойство TagName, которое вы можете использовать для захвата всех элементов управления при построении вашего словаря.

...