如何在ASP中替换字符串与用户控件.净WebForms

本文关键字:用户 控件 WebForms 字符串 替换 ASP | 更新日期: 2023-09-27 18:06:02

我在数据库中有这样的HTML内容:<div class='content'>This is the test text <cms:control name='test' /></div>

我需要在页面上呈现此内容,但将<cms:control name='test' />替换为相关的用户控件。

我不能解析控件到字符串,因为它可能是一个复杂的ajax控件,验证器等。

最好的方法是什么?

如何在ASP中替换字符串与用户控件.净WebForms

如果你必须这样做,我建议使用HTML敏捷包来解析和呈现你的页面后面的用户控件。

像这样…

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>

In Page Load:

loadedControls.LoadControl("UserControllAddress");