Asp.net 按名称模式迭代引用控件(VB.NET)

Asp.net 按名称模式迭代引用控件(VB.NET),asp.net,vb.net,dynamic,controls,iteration,Asp.net,Vb.net,Dynamic,Controls,Iteration,是否有一种方法可以根据ASP.NET控件的名称模式迭代引用该控件?也许是“指针”或什么 我拥有的是一大组组合框(每个组合框都有一个相关的DropDownList和TextBox控件)。默认情况下,DropDownList始终选择一个项目,但用户可能希望提交一个空值。我提出了以下代码来处理三种情况:NULL、现有项和新项 'TextBoxControl & DropDownListControl should iteratively reference their ' respectiv

是否有一种方法可以根据ASP.NET控件的名称模式迭代引用该控件?也许是“指针”或什么

我拥有的是一大组组合框(每个组合框都有一个相关的DropDownList和TextBox控件)。默认情况下,DropDownList始终选择一个项目,但用户可能希望提交一个空值。我提出了以下代码来处理三种情况:NULL、现有项和新项

'TextBoxControl & DropDownListControl should iteratively reference their
'  respective TextBox & DropDownList controls by the actual control name
If StrComp(TextBoxControl.Text, DropDownListControl.SelectedItem.ToString) = 0 Then
    'When an Existing Item is selected, Do Something
ElseIf Not TextBoxControl.Text = "" Then
    'When a New Item is entered, Validate & Do Something
Else
    'When NULL, Do Something
End If
问题是,有这么多的组合框,我很容易就会得到数百行代码。我希望以一种更动态的方式来处理这个问题,但我不知道是否有可能以这种方式引用控件。假设我想分别引用所有TextBox控件和DropDownList控件

我可以使用给定的命名模式进行字符串格式化,以生成任何控件的名称ID,因为它们都使用相同的模式命名。例如,通过附加一个特定的后缀,对于文本框控件说“_tb”,对于DropDownList控件说“_ddl”:

Left(item.SelectedItem.ToString, item.SelectedItem.ToString.Length - 3) + "_tb"

这种事情可以在VB中完成吗最终,我的目标是获取用户输入/选择的值(如果有的话),并将其发送到SQL Server上的存储过程中,以便插入数据库。

是。在包含文本框和下拉列表参数的函数中编写代码,然后根据这两个参数编写函数。然后,您只需为每个集合调用该函数,而不是到处复制/粘贴代码


不要试图用名字来选择事物。这是很脆弱的,并且对设计用于人类消费的领域提出了机器要求。

我不确定应用VBA的相同方法是否适用于您的情况,但我遇到了同样的问题,并且能够使用:

Me.MultiPage1.Pages(1).Controls(“ref”&i+1).Value


其中控件包含userform(“Me”)上的所有控件。因此,如果程序中的控件符合连续命名结构,那么如果上面应用vb.net

很容易处理。是的,大部分情况下我都能理解,但我正在努力解决的是如何将以名称为模式的字符串转换为引用控件对象本身的ClientID。换句话说,我如何传入字符串,但像引用控件ID一样引用它?假设你的意思是用一个“For Each”,这是我接近它的角度。@Chiramisu:不要用名字来引用控件。传入包含控件的变量。好的,差不多到了。现在我已经为每个DropDownList:TextBox对创建了一个语句,但它仍然不是迭代的。这是可以做到的,还是我必须分别给每一对打电话?如果可能的话,恐怕我需要一些代码。我似乎不明白。谢谢:)对不起,你能回答我最后的评论吗?然后我会记下答案,谢谢。:)