1

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

然后我使用 findcontrol 尝试获取这些输入框,以便我可以将数据保存到我的数据库中,findcontrol 始终为空,即使用户控件可见并在回发后在页面加载时重新创建。

非常感谢任何帮助。查找控制按钮:Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles 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

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

Protected 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

用户控制:

<%@ Control Language="VB" AutoEventWireup="false" CodeFile="MinorChild.ascx.vb" Inherits="MinorChild" %>

姓名

年龄

不锈钢#

出生日期

查找控件在静态的 howmanychildren 字段中工作

4

1 回答 1

1

我基本上自己弄清楚了,你必须引用容器,这就是其他地方的每个人都在说的,但我一直忽略正确代码的答案

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

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

于 2009-09-11T16:03:16.960 回答