【问题标题】:How to replace string with User Control in ASP.NET WebForms?如何在 ASP.NET WebForms 中用用户控件替换字符串?
【发布时间】:2013-03-27 14:50:38
【问题描述】:

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

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

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

最好的方法是什么?

【问题讨论】:

  • 你能不使用 PlaceHolder 并构建用户控件然后以这种方式分配它吗?
  • @DJKRAZE 如果我的 HTML 只是数据库中的字符串,我该如何使用占位符?行。我可以将它加载到占位符,但是如何将 元素替换为其中的 UserControl?
  • 我不确定这可能吗?您可以解析文本并在代码隐藏中动态创建控件。
  • 我会通过 sqldatareader 检索 ASP.NET 中的控件,然后将其放入脚本管理器 jquery sn-p 并在我希望它呈现时触发它......抽象的抽象答案问题。
  • 你和我都在寻找与WordPress Shortcodes 等效的对象。 This guy 早在 2005 年就在寻找它...

标签: c# asp.net user-controls webforms


【解决方案1】:

如果您必须这样做,我建议您使用 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();
}

如果您的控件过于复杂而无法采用这种方式,您可能应该重新考虑您的设计。

【讨论】:

    【解决方案2】:

    您可以加载您的用户控件:

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

    在页面加载中:

    loadedControls.LoadControl("UserControllAddress");
    

    【讨论】:

    • 您想动态加载用户控件,并且您在用户控件中有一些 c# 代码,那么您应该加载控件而不是替换它!
    猜你喜欢
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-17
    • 2016-03-26
    • 1970-01-01
    相关资源
    最近更新 更多