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

无法读取Repeater控件内TextBox的文本值问题求助

解决Repeater中控TextBox无法读取值的问题

你遇到的这个情况(能定位到TextBox控件,但读取不到用户输入的值)在ASP.NET开发里非常常见,核心原因几乎都是页面回发时Repeater被重复绑定了数据,导致用户输入的内容被初始数据源覆盖掉了。下面给你一步步的解决思路:

1. 先检查Page_Load的数据绑定逻辑

这是最关键的一步!如果你的Page_Load事件里没有判断IsPostBack就直接绑定Repeater,那么每次点击按钮触发回发时,Repeater都会重新加载初始数据,覆盖掉用户在TextBox里输入的内容。

修改你的Page_Load代码,确保只在首次加载页面时绑定数据:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    ' 只有非回发(首次加载)时才绑定Repeater
    If Not IsPostBack Then
        ' 替换成你实际的数据源绑定代码
        ' Article_Block_Migrated.DataSource = 你的数据源对象
        ' Article_Block_Migrated.DataBind()
    End If
End Sub

2. 优化控件查找的安全性(可选但推荐)

虽然你的代码能找到控件,但加上一些判断可以避免潜在的空引用问题,也能确保只处理Repeater里的有效数据项:

Private Sub btn_Save_Click(sender As Object, e As EventArgs) Handles btn_Save.Click       
    For Each item As RepeaterItem In Article_Block_Migrated.Items
        ' 只处理数据项(跳过Header、Footer等非数据行)
        If item.ItemType = ListItemType.Item OrElse item.ItemType = ListItemType.AlternatingItem Then
            Dim txtField1 As TextBox = DirectCast(item.FindControl("txt_DWPDate"), TextBox)
            If txtField1 IsNot Nothing Then
                Dim userInputValue = txtField1.Text
                ' 这里可以对读取到的值进行后续处理,比如存入数据库
                ' 调试时可以用Response.Write(userInputValue)验证
            End If
        End If
    Next
End Sub

3. 排查其他可能的原因

如果上面的方法还没解决,检查这两个配置:

  • 确认TextBox的ViewStateMode属性没有被设置为Disabled,ViewState是ASP.NET保存用户输入状态的核心,禁用后回发会丢失数据。
  • 确认Repeater的EnableViewState属性是True(默认就是True,除非你手动修改过)。

内容的提问来源于stack exchange,提问作者Varsha Soni

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:16:39