将字符串转换为WebControls - asp.net

时间:2011-08-10 15:46:53

标签: c# asp.net web-controls

如果您看到以下代码

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 个答案:

答案 0 :(得分:1)

创建一个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属性,您可以使用该属性捕获构建字典中的所有控件。