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

如何在VB.NET中遍历Div内的TextBox并检查输入内容?

如何遍历ASP.NET中特定前缀的TextBox并验证输入?

你提到的For Each确实是实现这个需求的最佳方案,With语句不太适合这种批量匹配控件ID的场景——毕竟With是用来简化对单个对象的重复操作,没法帮你筛选出符合ID前缀的所有TextBox。

下面给你提供VB.NET的具体实现思路和代码示例,刚好适配你的页面结构:


核心思路

  1. 定位到目标容器:也就是ID为dataheader的div
  2. 递归遍历容器内的所有控件(因为你的TextBox嵌套在row、col这些子容器里,必须递归才能全部找到)
  3. 筛选出类型为TextBox且ID以txb开头的控件
  4. 检查每个符合条件的TextBox是否为空或仅包含空白字符,做相应的验证处理

VB.NET 代码示例

首先写一个辅助函数用来递归获取容器内的所有控件,再写一个验证函数:

' 递归获取容器内所有子控件的辅助方法
Private Function GetAllControls(parentControl As Control) As List(Of Control)
    Dim controlList As New List(Of Control)()
    
    For Each childControl As Control In parentControl.Controls
        controlList.Add(childControl)
        ' 如果当前控件还有子控件,继续递归查找
        If childControl.HasControls() Then
            controlList.AddRange(GetAllControls(childControl))
        End If
    Next
    
    Return controlList
End Function

' 验证所有txb开头的TextBox是否已填写
Private Function ValidateRequiredTextBoxes() As Boolean
    Dim isValidationPassed As Boolean = True
    ' 获取目标div容器
    Dim dataHeaderDiv As HtmlGenericControl = DirectCast(Me.FindControl("dataheader"), HtmlGenericControl)
    
    ' 遍历所有符合条件的TextBox
    For Each ctrl As Control In GetAllControls(dataHeaderDiv)
        If TypeOf ctrl Is TextBox AndAlso ctrl.ID.StartsWith("txb") Then
            Dim targetTextBox As TextBox = DirectCast(ctrl, TextBox)
            
            ' 检查是否为空或仅空白字符
            If String.IsNullOrWhiteSpace(targetTextBox.Text) Then
                ' 这里可以添加错误提示样式,比如用Bootstrap的invalid状态
                targetTextBox.CssClass &= " is-invalid"
                isValidationPassed = False
            Else
                ' 移除之前可能添加的错误样式
                targetTextBox.CssClass = targetTextBox.CssClass.Replace(" is-invalid", "")
            End If
        End If
    Next
    
    Return isValidationPassed
End Function

然后在你的提交按钮点击事件里调用这个验证函数:

Protected Sub btnSubmit_Click(sender As Object, e As EventArgs) Handles btnSubmit.Click
    If ValidateRequiredTextBoxes() Then
        ' 验证通过,执行你的业务逻辑
        ' 比如保存数据、跳转页面等
    Else
        ' 验证失败,提示用户
        lblError.Text = "请填写所有必填的字段!"
    End If
End Sub

额外说明

如果你觉得递归写法有点繁琐,也可以用LINQ来简化筛选过程,效果是一样的:

Dim requiredTextBoxes = From ctrl In GetAllControls(dataHeaderDiv)
                       Where TypeOf ctrl Is TextBox AndAlso ctrl.ID.StartsWith("txb")
                       Select DirectCast(ctrl, TextBox)

For Each tbx In requiredTextBoxes
    ' 同样的验证逻辑...
Next

另外,注意你的txbRplOrderNumber是默认隐藏的,如果这个控件只有在勾选复选框后才需要填写,你可以在验证时额外判断它的Visible属性,避免验证隐藏的控件:

If TypeOf ctrl Is TextBox AndAlso ctrl.ID.StartsWith("txb") AndAlso DirectCast(ctrl, TextBox).Visible Then
    ' 验证逻辑...
End If

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:38:46