我在数据库中有这样的 HTML 内容:
<div class='content'>This is the test text <cms:control name='test' /></div>
我需要在页面上呈现此内容,但替换<cms:control name='test' />
为相关的用户控件。
我无法将控件解析为字符串,因为它可能是一个复杂的 ajax 控件、验证器等。
最好的方法是什么?
我在数据库中有这样的 HTML 内容:
<div class='content'>This is the test text <cms:control name='test' /></div>
我需要在页面上呈现此内容,但替换<cms:control name='test' />
为相关的用户控件。
我无法将控件解析为字符串,因为它可能是一个复杂的 ajax 控件、验证器等。
最好的方法是什么?
您可以加载您的用户控件:
<div id="loadedControls" runat="server">
</div>
在页面加载中:
loadedControls.LoadControl("UserControllAddress");
如果您必须这样做,我建议您使用 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();
}
如果您的控件太复杂而无法以这种方式进行,您可能应该重新考虑您的设计。