2013-03-27 49 views
0

我有數據庫,HTML內容: <div class='content'>This is the test text <cms:control name='test' /></div>如何用ASP.NET WebForms中的用戶控件替換字符串?

我需要呈現頁面上此內容,但相關的用戶控制更換<cms:control name='test' />

我無法解析控制字符串,因爲它可能是用AJAX控件,驗證等複雜的。

這樣做的最好方法是什麼?

+0

你能不能用一個佔位符,並建立用戶控件,然後分配給它這樣..? – MethodMan 2013-03-27 14:52:59

+0

@DJKRAZE如何使用佔位符,如果我的HTML是隻是一個字符串的數據庫?好。我可以將它加載到佔位符,但是如何用UserControl替換元素呢? – inser 2013-03-27 14:55:13

+0

我不確定這可能嗎?您可以解析文本並在代碼隱藏中動態創建控件。 – Belogix 2013-03-27 15:05:49

回答

0

如果必須這樣,我會使用HTML敏捷包解析,並在您pagebehind渲染你的用戶控件建議這樣做。

事情是這樣的...

HtmlDocument doc = new HtmlDocument(); 
doc.LoadHtml(htmlFromDB); 
var query = doc.DocumentNode.Decendants("cm:control"); 
foreach(var node in query) 
{ 
    string userControlHTML = GetHTML(new MyUserControl()); 
    var newNode = HtmlNode.CreateNode(userControlHTML); 
    node.ParentNode.ReplaceChild(newNode, node); 
} 
//render doc.DocumentNode.OuterHtml in literal control on your page 
... 

static public string GetHTML(Control myControl) 
{ 
    System.IO.StringWriter sw = new System.IO.StringWriter(); 
    HtmlTextWriter myWriter = new HtmlTextWriter(sw); 
    myControl.RenderControl(myWriter); 
    return sw.ToString(); 
} 

如果你的控制過於複雜,做這種方式,你可能需要重新考慮你的設計。

0

您可以加載您的用戶控件:

<div id="loadedControls" runat="server"> 
</div> 

在頁面加載:

loadedControls.LoadControl("UserControllAddress"); 
+0

你想要動態加載用戶控件,並且你在用戶控件中有一些C#代碼,那麼你應該加載控件而不是替換它! – 2013-10-28 16:06:59

相關問題