ASP.NET Получить таблицу HTML - PullRequest
3 голосов
/ 10 августа 2010

У меня есть таблица на моей странице 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 ]

6 голосов
/ 10 августа 2010

Изначально я просто использовал методы InnerHtml или InnerText , но они не поддерживаются в классе HtmlTable .

Так что, если мы используем метод Render?Примерно так (возьмите у Анатолия Любарского )?

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();
}

Этот метод, очевидно, может быть очищен для обработки закрытия писателей и т. Д.

0 голосов
/ 10 августа 2010

Посмотрите на HTMLAgilityPack (несколько сообщений SO ссылаются на него.)

0 голосов
/ 10 августа 2010

Я использовал следующее в OnLoad методе моей страницы, чтобы преобразовать вашу таблицу в строку HTML:

    string html;
    using (var writer = new StringWriter())
    using (var xmlwriter = new HtmlTextWriter(writer))
    {
        this.resultsTable.RenderControl(xmlwriter);
        html = writer.ToString();
    }
0 голосов
/ 10 августа 2010

Я могу придумать, как это сделать.Легко было бы окружить стол в.Затем на вашей стороне vb / C # просто вызовите hold.innerhtml, и он вернет строку.

0 голосов
/ 10 августа 2010

Поскольку ваша таблица является серверным элементом управления, вы можете использовать его метод 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();
        }
    }
0 голосов
/ 10 августа 2010

Хм. Перед размещением формы я бы сделал javascript разметки таблицы в каком-то скрытом поле (которое является серверным элементом управления).

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

JavaScript:

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

РЕДАКТИРОВАТЬ: И да, я бы беспокоился о проверке запроса, который произойдет! Вам придется отключить его или заменить эти элементы разметки с чем-то еще, прежде чем сохранять его в скрытом поле

...