C#循环遍历通过javascript添加的HTML表行

时间:2014-03-18 09:47:10

标签: c# javascript asp.net html-table

我正在尝试使用runat =“server”遍历HTML表格 - 但它的数据是通过javascript动态添加的。

<table runat="server" id="confirmCartTable" class="confirmCartTable cartGrid table">
   <tr>
       <th>ID</th>
       <th>Product</th>
       <th>Price</th>
       <th>Quantity</th>
       <th>Total</th>
   </tr>
</table>

它下方显示3行。但是当我使用C#循环时:

    //get the datatable consisting of ProductID, Quantity, Price
    for(int i = 0;i < confirmCartTable.Rows.Count; i++)
    {
         **//confirmCartTable.Rows.Count is only 1, table headers only**
         HtmlTableRow row = confirmCartTable.Rows[i];
         dr = dt.NewRow();
         dr["ProductID"] = row.Cells[0].Controls[0];
         dr["Quantity"] = row.Cells[2].Controls[0];
         dr["Price"] = row.Cells[3].Controls[0];
         dt.Rows.Add(dr);
    }

是因为行是通过JS动态添加的吗?有什么可以解决这个问题?

在上面的循环中,我需要将它添加到DataTable中。我得到了row.Cells [i] .Controls [0] as System.Web.UI.LiteralControl ..我试过用

StringBuilder sb = new StringBuilder();
StringWriter tw = new StringWriter(sb);
HtmlTextWriter hw = new HtmlTextWriter(tw);

HtmlTable.RenderControl(hw);
dr[i] = sb.ToString();

它有效,但这太长了(我必须为所有3列做这个..)

总结问题,

  1. C#HtmlTable不会遍历通过JS添加的数据
  2. 获取每个HtmlTableRow的内部html

1 个答案:

答案 0 :(得分:0)

您的逻辑问题是您通过javascript动态添加行将在回发时丢失。通过javascript管理的dom不会被发回,因为它不是输入字段。 您可以通过在服务器上运行hiddenfield来规避这一点。在post back上用tableh的innerhtml设置hiddenfield的值。在服务器端查询此隐藏字段以获取html。希望这很清楚