我有數據庫,HTML內容: <div class='content'>This is the test text <cms:control name='test' /></div>
如何用ASP.NET WebForms中的用戶控件替換字符串?
我需要呈現頁面上此內容,但相關的用戶控制更換<cms:control name='test' />
。
我無法解析控制字符串,因爲它可能是用AJAX控件,驗證等複雜的。
這樣做的最好方法是什麼?
我有數據庫,HTML內容: <div class='content'>This is the test text <cms:control name='test' /></div>
如何用ASP.NET WebForms中的用戶控件替換字符串?
我需要呈現頁面上此內容,但相關的用戶控制更換<cms:control name='test' />
。
我無法解析控制字符串,因爲它可能是用AJAX控件,驗證等複雜的。
這樣做的最好方法是什麼?
如果必須這樣,我會使用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();
}
如果你的控制過於複雜,做這種方式,你可能需要重新考慮你的設計。
您可以加載您的用戶控件:
<div id="loadedControls" runat="server">
</div>
在頁面加載:
loadedControls.LoadControl("UserControllAddress");
你想要動態加載用戶控件,並且你在用戶控件中有一些C#代碼,那麼你應該加載控件而不是替換它! – 2013-10-28 16:06:59
你能不能用一個佔位符,並建立用戶控件,然後分配給它這樣..? – MethodMan 2013-03-27 14:52:59
@DJKRAZE如何使用佔位符,如果我的HTML是隻是一個字符串的數據庫?好。我可以將它加載到佔位符,但是如何用UserControl替換 元素呢? –
inser
2013-03-27 14:55:13
我不確定這可能嗎?您可以解析文本並在代碼隱藏中動態創建控件。 – Belogix 2013-03-27 15:05:49