You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET动态添加Table单元格获取Text返回空的解决方法

问题根因
  • 你是通过向TableCell.Controls集合添加LiteralControl的方式写入单元格内容,而TableCell.Text属性仅在直接对其赋值时才会返回对应字符串,不会自动拼接子控件的内容,因此直接访问.Text得到空值是预期行为。
  • ASP.NET WebForm的动态创建服务器控件不会跨回发自动保留,如果你填充表格的逻辑仅在首次页面加载(即包裹在If Not IsPostBack判断块中)时执行,那么按钮点击触发回发时,你动态添加的所有数据行不会被重建,此时Table2.Rows集合中仅存在你在ASPX页面静态定义的表头行,不仅取不到内容,甚至会出现索引越界错误。
解决方法

方法1:直接赋值Text属性(最简便)

填充单元格时无需创建LiteralControl,直接给TableCell.Text赋值即可,后续可直接通过.Text属性读取内容,修改填充循环代码如下:

For i = 0 To 8
    Dim tcell As New TableCell
    tcell.Text = fields(i) ' 直接赋值Text属性
    trow.Cells.Add(tcell)
Next

修改后你原有读取单元格的代码Table2.Rows(3).Cells(2).Text即可正常返回内容。

方法2:遍历子控件读取LiteralControl内容

如果有特殊需求必须通过添加子控件的方式写入单元格内容,可以直接读取单元格内第一个LiteralControl的Text属性:

Dim targetCell As TableCell = Table2.Rows(3).Cells(2)
Dim cellContent As String = CType(targetCell.Controls(0), LiteralControl).Text

必做配置:修正动态控件的加载时机

无论使用上述哪种方法,都要保证表格填充逻辑在每次页面生命周期中执行,不要将填充代码放在If Not IsPostBack判断块中,否则回发时动态行销毁,无法读取任何内容。

优化建议:如果后续需要获取用户修改后的表格值,不建议使用asp:Table作为数据承载控件,替换为GridView、Repeater这类内置状态维护的数据控件更稳定;也可以在首次读取文本文件填充表格时,将原始数据存入ViewState或Session,回发时直接从存储的数据源中取值,比遍历控件可靠性更高。

内容的提问来源于stack exchange,提问作者Laurent F.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 00:33:24