在VB Web App中迭代文本框

时间:2011-08-15 20:08:33

标签: asp.net vb.net

对于这类问题有几个答案,但对我来说似乎都不是很清楚,我对JQuery没有经验,所以我在这里问。

我有一个VB Web应用程序,在Default.aspx中有一堆文本框(使用Visual Web Designer 2010 Express中的基本模板)。如果可能的话,我想使用某种VB解决方案迭代这些文本框,并在用户按下按钮时清除它们。我尝试过这样的事情:

Dim cControl As Control
For Each cControl in Me.Controls
    If cControl Is TextBox Then
        cControl.Text = ""
    EndIf
Next

但这不起作用。如果有人能指出我正确的方向,那将是伟大的。谢谢!

3 个答案:

答案 0 :(得分:2)

您的代码有2个问题。首先,使用代码:

For Each cControl in Me.Controls
  ...
Next
只有当所有文本框都在主页上,而不是在面板上,在组框中等时,

才会起作用。

其次,代码

If cControl is Textbox Then

将失败,因为cControl与Textbox不完全相同。您想检查cControl的类型是否为Textbox。代码的递归解决方案是:

Public Sub ClearTextBoxes (ctrl as Control)
  If Ctrl.HasChildren Then
    For each childCtrl as Control in Ctrl.Controls
      ClearTextBoxes(childCtrl)
    Next
  Else
    If TypeOf Ctrl is TextBox Then
      DirectCast(Ctrl, TextBox).Text = String.Empty
    End If
  End If
End Sub

要运行该方法,您可以调用:

ClearTextBoxes(Me)

答案 1 :(得分:0)

除非您将文本框嵌套在某种容器控件中,否则这应该有效......

    Dim cControl As Control
    For Each cControl In Page.Form.Controls
        If cControl.GetType().ToString() = "System.Web.UI.WebControls.TextBox" Then
            CType(cControl, TextBox).Text = ""
        End If
    Next

答案 2 :(得分:0)

你需要递归循环,因为某些控件可能嵌套在其他控件中,比如Panels等。

public void ClearTextBoxes(Control ctrl)
{
    foreach (Control childCtrl in ctrl.Controls)
    {
        if (childCtrl is TextBox)
        {
             ((TextBox)ctrl).Text = String.Empty;
        }

        ClearTextBoxes(childCtrl);
    }
}