代码之家  ›  专栏  ›  技术社区  ›  Wayne Werner

ASP.NET获取表HTML

  •  3
  • Wayne Werner  · 技术社区  · 14 年前

    我的ASP.NET页面上有一个类似这样的表:

    <table runat="server" id="resultsTable"></table>
    

    我动态地将内容添加到表中,它工作得很好。但是,我想在添加动态内容后获得表的HTML,例如类似的内容(格式不重要,我刚添加了它)

    <table runat="server" id="resultsTable">
      <tr>
        <td>Hello!</td>
      </tr>
      <tr>
        <td>Goodbye!</td>
      </tr>
    </table>
    

    我需要一个字符串的结果。显然,我可以做一些循环并用数据构建自己的表,但如果可能的话,我宁愿不这样做。

    6 回复  |  直到 7 年前
        1
  •  6
  •   sgriffinusa    14 年前

    最初我只是想用 InnerHtml InnerText 方法,但这些是 not supported on the HtmlTable class .

    那么如果我们使用渲染方法呢?像这样的东西(从 Anatoly Lubarsky )?

    public string RenderControl(Control ctrl) 
    {
        StringBuilder sb = new StringBuilder();
        StringWriter tw = new StringWriter(sb);
        HtmlTextWriter hw = new HtmlTextWriter(tw);
    
        ctrl.RenderControl(hw);
        return sb.ToString();
    }
    

    这种方法显然可以用来处理关闭编写器等。

        2
  •  0
  •   DevExpress Team    14 年前

    由于表是服务器控件,因此可以使用其renderControl方法获取呈现结果:

        public static string GetRenderResult(Control control) {
            using(StringWriter sw = new StringWriter(CultureInfo.InvariantCulture)) {
                using(HtmlTextWriter writer = new HtmlTextWriter(sw))
                    control.RenderControl(writer);
                sw.WriteLine();
                return sw.ToString();
            }
        }
    
        3
  •  0
  •   Ryan    14 年前

    我有两种方法可以考虑如何做到这一点。最简单的办法就是把桌子围起来。然后在您的vb/c端,只需调用hold.innerhtml,它将返回一个字符串。

        4
  •  0
  •   kbrimington    14 年前

    我在 OnLoad 将表转换为HTML字符串的“我的页面”方法:

        string html;
        using (var writer = new StringWriter())
        using (var xmlwriter = new HtmlTextWriter(writer))
        {
            this.resultsTable.RenderControl(xmlwriter);
            html = writer.ToString();
        }
    
        5
  •  0
  •   deostroll    14 年前

    嗯。在发布表单之前,我会将表标记JavaScript转换为一些隐藏字段(这是一个服务器控件)。

    <div id="tablediv">
    <table>...</table>
    </div>
    

    JavaScript:

    var html = document.getElementById('tablediv').innerHTML;
    document.getElementById('hfTableHtml').value = html;
    

    编辑:是的,我担心将要发生的请求验证!在将标记元素存储到隐藏字段之前,必须禁用它或用其他元素替换这些标记元素。

        6
  •  0
  •   LesterDove    14 年前

    窥视 HTMLAgilityPack (几篇这样的帖子引用了它。)