2010-08-10 2 views
3

У меня есть таблица на моей ASP.net странице что-то вроде этого:ASP.NET Получить таблицу HTML

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

я динамически добавлять содержимое в таблицу, и она работает просто отлично. Тем не менее, я хочу, чтобы получить HTML таблицы, как только я добавил динамический контент, то есть что-то вроде этого (форматирование не важно, я просто добавил его)

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

Мне нужен результат, строка. Очевидно, я мог бы сделать цикл и построить свою собственную таблицу с данными, но я бы предпочел не делать этого, если это вообще возможно.

+0

Нужны ли вам содержимое каждой ячейки, или всей таблицы? – sgriffinusa

+0

Весь стол, HTML и все –

ответ

6

Первоначально я хоть просто использовать InnerHtml или InnerText методы, но они not supported on the HtmlTable class.

Итак, что, если мы используем метод Render? Что-то вроде этого (возьмите от 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(); 
} 

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

0

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

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

JavaScript:

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

EDIT: И да, я бы беспокоиться о проверке запроса, который будет происходить! Вы должны были бы отключить его или заменить эти элементы разметки ж/что-то еще, прежде чем хранить его в скрытом поле

0

С вашей таблицы управления сервером, вы можете использовать его метод 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

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

+0

К сожалению, это не работает «потому что содержимое не является буквальным». –

0

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

string html; 
    using (var writer = new StringWriter()) 
    using (var xmlwriter = new HtmlTextWriter(writer)) 
    { 
     this.resultsTable.RenderControl(xmlwriter); 
     html = writer.ToString(); 
    }