1〜10の値のドロップダウンリストがあるフォームのパネルがあります。パネルのボタンを押すと、そのパネルが非表示になり、2番目のボタンが表示されます。2番目のパネルには、動的に生成されるコントロールの行があります。行数は、ドロップダウンリストで選択した項目によって決まります。
私の問題は、検証を実行してから、動的に作成されたコントロールのコンテンツの値を保存したいときに、コントロールが削除されることです。
これはページのライフサイクルと動的に作成されたコントロールの永続性に関係していることを理解していますが、問題を回避する方法がわかりません。私はここで他の多くの同様の質問を読みました、そしてこれを誰が解決するかについての実用的な例を持っている人はほとんどいないので、私は賢明ではありません。これには、動的に作成されたコントロールを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