如果您看到以下代码
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对象。请有人建议。
答案 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属性,您可以使用该属性捕获构建字典中的所有控件。