我正在尝试使用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列做这个..)
总结问题,
答案 0 :(得分:0)
您的逻辑问题是您通过javascript动态添加行将在回发时丢失。通过javascript管理的dom不会被发回,因为它不是输入字段。 您可以通过在服务器上运行hiddenfield来规避这一点。在post back上用tableh的innerhtml设置hiddenfield的值。在服务器端查询此隐藏字段以获取html。希望这很清楚