Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取在PageLoad/Init-ASP.NET之后创建的动态创建控件的值_Asp.net_Vb.net_Postback_Viewstate - Fatal编程技术网

获取在PageLoad/Init-ASP.NET之后创建的动态创建控件的值

获取在PageLoad/Init-ASP.NET之后创建的动态创建控件的值,asp.net,vb.net,postback,viewstate,Asp.net,Vb.net,Postback,Viewstate,我有一个带有表单的面板,它有一个值为1-10的下拉列表。按下面板上的按钮时,该面板不可见,第二个面板可见。在第二个面板上,我动态生成了多行控件。行数由下拉列表中的selecteditem确定 我的问题是,当我想执行验证并存储动态创建的控件内容的值时,这些控件会被删除 我知道这与页面的生命周期和动态创建控件的持久性有关,但我不知道如何解决这个问题。我在这里读过许多其他类似的问题,很少有人有解决这个问题的工作实例,所以我一点也不聪明。这包括需要在pageload或pageinit上创建动态创建的控件

我有一个带有表单的面板,它有一个值为1-10的下拉列表。按下面板上的按钮时,该面板不可见,第二个面板可见。在第二个面板上,我动态生成了多行控件。行数由下拉列表中的selecteditem确定

我的问题是,当我想执行验证并存储动态创建的控件内容的值时,这些控件会被删除

我知道这与页面的生命周期和动态创建控件的持久性有关,但我不知道如何解决这个问题。我在这里读过许多其他类似的问题,很少有人有解决这个问题的工作实例,所以我一点也不聪明。这包括需要在pageload或pageinit上创建动态创建的控件的建议,这怎么可能,因为我们不知道要创建多少控件

重述一下:这些控件在页面加载时不会添加,这些控件仅在用户按下按钮后添加。我们不知道要制作多少控件,直到用户选择了他们想要的数量

到目前为止,我的代码是:

Partial Class View
Inherits SeatPlannerModuleBase
Implements IActionable
Dim valid As String = "success"

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load, Me.Load
    Try

        Dim n As Integer = 0

        ' now, create n TextBoxes, adding them to the PlaceHolder TextBoxesHere
        For i As Integer = 0 To n - 1
            res_Placeholder.Controls.Add(New Label())
            booking_Placeholder.Controls.Add(New Label())

            title_Placeholder.Controls.Add(New TextBox())
            firstname_Placeholder.Controls.Add(New TextBox())
            surname_Placeholder.Controls.Add(New TextBox())
            ticketNum_Placeholder.Controls.Add(New TextBox())

        Next

        ' now, set the Text property of each TextBox
        IterateThroughBooking(Me)
        IterateThroughReservation(Me)
        IterateThroughTitle(Me)
        IterateThroughFirstname(Me)
        IterateThroughSurname(Me)
        IterateThroughTicketNum(Me)

        If Not Page.IsPostBack Then

        End If

    Catch exc As Exception        'Module failed to load
        ProcessModuleLoadException(Me, exc)
    End Try
End Sub

Protected Sub IterateThroughTitle(ByVal parent As Control)
    Dim count As Integer = 1

    For Each c As Control In title_Placeholder.Controls
        If c.[GetType]().ToString().Equals("System.Web.UI.WebControls.TextBox") AndAlso c.ID Is Nothing Then
            'DirectCast(c, TextBox).Text = "TextBox_Title " + count.ToString()
            DirectCast(c, TextBox).ID = "TextBox_Title_" + count.ToString()
            DirectCast(c, TextBox).CssClass = "DYN_TextBox"
            count += 1
        End If

        If c.Controls.Count > 0 Then
            IterateThroughTitle(c)
        End If
    Next
End Sub

Protected Sub CreateTextBoxes()

    Dim n As Integer = number_of_tickets_Ddl.SelectedValue

    ' now, create n TextBoxes, adding them to the PlaceHolder TextBoxesHere
    For i As Integer = 0 To n - 1
        res_Placeholder.Controls.Add(New Label())
        booking_Placeholder.Controls.Add(New Label())

        title_Placeholder.Controls.Add(New TextBox())
        firstname_Placeholder.Controls.Add(New TextBox())
        surname_Placeholder.Controls.Add(New TextBox())
        ticketNum_Placeholder.Controls.Add(New TextBox())

    Next

    ' now, set the Text property of each TextBox
    IterateThroughBooking(Me)
    IterateThroughReservation(Me)
    IterateThroughTitle(Me)
    IterateThroughFirstname(Me)
    IterateThroughSurname(Me)
    IterateThroughTicketNum(Me)

    Retreive_first_row()

End Sub

Protected Sub next_submit_Btn_Click(ByVal sender As Object, ByVal e As EventArgs) Handles next_submit_Btn.Click

    Step1_Pnl.Visible = False
    Step2_Pnl.Visible = True
    CreateTextBoxes()
    Button1.Attributes.Add("OnClick", "validate_step2(); return false;")

End Sub

Protected Sub next_submit2_Btn_Click(ByVal sender As Object, ByVal e As EventArgs) Handles next_submit2_Btn.Click

    step2_error_Lbl.Text = CType(Me.FindControl("TextBox_Title_2"), TextBox).Text

End Sub

End Class       

动态创建的控件在回发后不会持久,您必须每次重新创建它们,这是一个技术限制。要知道创建了多少个控件,可以在session/viewstate/which中保存一个变量,如果将它们命名为与前一个状态相同的名称,那么viewstate将被恢复

有关详细信息,请查看以下链接:


请将您的代码范围缩小到仅适用于相关代码。问题是我取了用户在下拉列表中选择的数字,创建了那么多行文本框。当我试图保存他们在这些文本框中输入的内容时,会出现“对象引用未设置为对象实例”错误。我认为这是因为,只要按下试图从文本框中检索值的按钮,这些框就会消失。如何从这些文本框中获取值?在
Page\u Load
中调用
createtextboxs
。如何知道要创建多少个?它可以是一行5个文本框,也可以是10行。这仅在用户选择并提交按钮后决定。使用最新更改编辑您的代码,并删除所有不相关的代码。这样,更多的人可能会看到它并帮助你。