FindControl没有在向导控件中找到动态添加的用户控件

时间:2009-09-11 15:04:37

标签: findcontrol

我有一个向导控件,我正在添加一个包含简单表的用户控件 一些输入字段基于用户输入他们有多少孩子。例如:你有多少孩子,所以我根据该循环添加了用户控件ascx 进入我的巫师的第5步也是在一个母版页。

然后我使用findcontrol来尝试获取那些输入框,这样我就可以将数据保存到我的数据库中,findcontrol总是为null,即使用户控制在visable中并在回发后重新创建页面加载。

任何帮助非常感谢。 找到控制按钮:  受保护的子Button1_Click(ByVal sender As Object,ByVal e As System.EventArgs)处理Button1.Click

    Dim numbchildren As Integer = CInt(Howmanychildren.Text)

    For i As Integer = 1 To numbchildren - 1

        Dim textbox As TextBox = TryCast(Me.Wizard1.FindControl("WizardStep5").FindControl("Minor_1_Child_Name"), TextBox)
        'Dim textbox2 As TextBox = TryCast(Me.Wizard1.FindControl("WizardStep5").FindControl("Howmanychildren"), TextBox)


        If textbox IsNot Nothing Then

            Response.Write("Found TextBox1 <br>")
            Dim val As String = textbox.Text
            Response.Write(val & "<br>")

        Else
            Response.Write("not found" & "<br>")
        End If

        ' Insert into DB
        'SaveValueToDatabase(val)
    Next

End Sub

用户控件在下拉列表中添加了功能:

受保护的子Doyouhavechildren_SelectedIndexChanged(ByVal sender As Object,ByVal e As System.EventArgs)处理Doyouhavechildren.SelectedIndexChanged

    Dim numbchildren As Integer = CInt(Howmanychildren.Text)
    Dim cnt As Integer = 1


    'Panel1.Controls.Clear()

    Select Case Doyouhavechildren.SelectedIndex
        Case 0



            ViewState.Add("Doyouhavechildren", numbchildren)


            Do While cnt <= numbchildren

                Dim uc As Web.UI.UserControl = DirectCast(Page.LoadControl("MinorChild.ascx"), Web.UI.UserControl)
                uc.ID = "Minor_" + cnt.ToString()
                Wizard1.ActiveStep.Controls.Add(uc)



                cnt = cnt + 1 
            Loop
            Exit Select
        Case 1

            Exit Select
    End Select

End Sub

用户控制:

&lt;%@ Control Language =“VB”AutoEventWireup =“false”CodeFile =“MinorChild.ascx.vb”Inherits =“MinorChild”%&gt;   

  名称

年龄

SS#

DOB

find控件在howmanychildren字段中是静态的

1 个答案:

答案 0 :(得分:1)

我自己想通了 基本上,你必须重新考虑容器,这就是其他地方所说的所有人,但我一直无视答案 正确的代码是

Dim textbox As TextBox = TryCast(Me.Wizard1.FindControl("WizardStep5").FindControl("Minor_1").FindControl("Child_Name"), TextBox)

您必须首先引用用户控件名称,然后在其中进行搜索,即使客户端源是欺骗性的。