asp.net访问动态控件中的动态控件

时间:2015-10-12 14:28:03

标签: asp.net .net vb.net

我需要根据下拉视图中选择的项目构建高级搜索功能。

我已经在asp.net中以编程方式构建了一个表,在这个表中我还动态添加了一个标签,文本框和下拉控件。

这些都渲染得很好,但是我遇到的部分是从文本框和后续下拉列表中获取值。

这是表格的构建方式

Public Sub buildAdvancedOptions()

        'Creat the Table and Add it to the Page
        Dim table As New Table()
        table.ID = "advancedTable"
        Page.Form.Controls.Add(table)


        For i As Integer = 0 To _dictOfClassAndCol.Count() - 1
            Dim row As New TableRow()

            Dim labelCell As New TableCell()
            Dim textCell As New TableCell()
            Dim optionsCell As New TableCell()
            Dim tb As New TextBox()
            Dim lbl As New Label()
            Dim ddl As New DropDownList()

            ' Set a unique ID for each TextBox added
            lbl.Text = _dictOfClassAndCol.Keys.ElementAt(i).ToString()
            lbl.ID = "lbl" & _dictOfClassAndCol.Keys.ElementAt(i)
            tb.ID = "txt" & _dictOfClassAndCol.Keys.ElementAt(i)
            ddl.ID = "ddl" & _dictOfClassAndCol.Keys.ElementAt(i)
            ddl.Items.Add("is equal to")
            ddl.Items.Add("is not equal to")
            ddl.Items.Add("is like")
            ddl.Items.Add("is not like")
            ddl.Items.Add("contains")
            ddl.Items.Add("between")

            labelCell.Controls.Add(lbl)
            textCell.Controls.Add(tb)
            optionsCell.Controls.Add(ddl)
            ' Add the TableCell to the TableRow
            row.Cells.Add(labelCell)
            row.Cells.Add(textCell)
            row.Cells.Add(optionsCell)
            row.Attributes.Add("class", _dictOfClassAndCol.Keys.ElementAt(i).ToString().Replace(" ", ""))

            ' Add the TableRow to the Table
            table.Rows.Add(row)
        Next
        advanced.Controls.Add(table)


    End Sub

这就是我试图获取文本框和下拉列表的值,以便我可以将它们传递到另一个函数来构建一个字符串。

Protected Sub btnAdvancedSearch_Click(sender As Object, e As EventArgs) Handles btnAdvancedSearch.Click

        Dim sb As StringBuilder = New StringBuilder()
        Dim message As String = ""
        For Each control As table In advanced.Controls.OfType(Of table)()                
            message += control.ID + ": " + control.ID  + "\n"
        Next
        ClientScript.RegisterClientScriptBlock(Me.GetType(), "alert", "alert('" & message & "');", True)

    End Sub

我可以看到我正在构建适当数量的行和单元格,但无法进入名为"advancedTable"的表控件以便在此处查找控件。

非常感谢任何有关如何做到这一点的帮助。

2 个答案:

答案 0 :(得分:0)

buildAdvancedOptions()开头,该表格已添加到Page.Form.Controls,最后您有advanced.Controls.Add(table)。根据按钮点击事件中的代码,我认为无需将其添加到Page.Form.Controls

答案 1 :(得分:0)

尝试使用FindControl函数并转换表:

Dim tblTarget As Table = CType(advanced.FindControl("advancedTable"), Table)

Dim strMessage As String = String.Empty

For Each objControl As Control In tblTarget.Controls

    strMessage += objControl.ID & " / "

Next

迭代行/单元格需要额外的代码,确定搜索参数的类型控件(DropDown vs TextBox)并获取它们的值,但这至少应该让你掌握表格。