2011-08-10 54 views
2

如果你看到下面的代碼字符串轉換爲器WebControls - asp.net

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

我在這裏表對象轉換爲字符串。

我去拿輸出​​3210

現在我想回滾它。我有一個字符串,我需要將其轉換成WebControls.Table對象。請有人建議某種方式。

回答

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屬性,您可以使用它來捕獲構建字典時的所有控件。

+0

很多感謝先生Yuriy Faktorovich。 – michael