【问题标题】:Get the HTML rendered by ASP.NET control in Code behind在 Code behind 中获取 ASP.NET 控件呈现的 HTML
【发布时间】:2010-11-12 06:10:02
【问题描述】:

您好,我想在后面的代码中调用 Panel 内的相应 html。我该怎么做?

我有这个

<asp:Panel ID="MyPanel" runat="server">
    // other asp.net controls and html stuffs here.
</asp:Panel>

我想获得与MyPanel 等效的 HTML 以及我后面代码中的所有内容,例如 PageLoad 或某些方法。

谢谢。

【问题讨论】:

标签: c# asp.net


【解决方案1】:

RenderControl() 不起作用吗?

创建控件的实例,然后在其上调用 RenderControl()。当然,这意味着您的面板位于 UserControl 中

来自 cmets 的示例:

StringBuilder sb = new StringBuilder(); 
StringWriter tw = new StringWriter(sb); 
HtmlTextWriter hw = new HtmlTextWriter(tw); 
ctrl.RenderControl(hw); 
var html = sb.ToString(); 

【讨论】:

  • 但是 RenderControl() 的返回类型是 void.. 我需要将 HTML 等效为字符串或对象。
  • 您将 TextWriter 传递给 RenderControl() 方法。当方法返回时,您在 TextWriter 中有您的 html
  • StringBuilder sb = new StringBuilder(); StringWriter tw = new StringWriter(sb); HtmlTextWriter hw = new HtmlTextWriter(tw); ctrl.RenderControl(hw); var html = sb.ToString();
  • 其中 ctrl 是您的 UserControl 的实例
  • 如果(例如)像
    这样的元素是通过 javascript 动态添加到面板中的,这将不起作用。动态添加的内容不会出现在结果中。
【解决方案2】:

@Shiv Kumar 的回答是正确的。但是,您不需要StringBuilder

StringWriter tw = new StringWriter(); 
HtmlTextWriter hw = new HtmlTextWriter(tw); 
ctrl.RenderControl(hw); 
var html = tw.ToString();

这也有效

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 2013-09-27
    • 1970-01-01
    • 2013-02-04
    • 2010-09-08
    • 2014-08-18
    • 1970-01-01
    相关资源
    最近更新 更多