ASP.NET Trouver DropDown valeur à l'intérieur Répéteur Partie II Contrôle
-
06-09-2019 - |
Question
Ive a eu quelques questions à ce sujet, encore des problèmes.
Je veux trouver les valeurs d'un certain nombre de contrôles de liste déroulante et TextBox dans un contrôle répéteur.
db.ConnectionString = SystemConnString
db.Open()
Dim selectedAdTitle As String = ""
Dim enteredAdFullName As String = ""
cmd.Parameters.Add(New SqlParameter("@TransactionID", TransactionID))
cmd.Parameters.Add(New SqlParameter("@AdTitle", selectedAdTitle))
cmd.Parameters.Add(New SqlParameter("@AdFullName", enteredAdFullName))
For i As Integer = 0 To myRepeater.Items.Count - 1
Dim AdTitle As DropDownList = DirectCast(myRepeater.Items(i).FindControl("AdTitle"), DropDownList)
Dim AdFullName As TextBox = DirectCast(myRepeater.Items(i).FindControl("AdFullName"), TextBox)
selectedAdTitle = AdTitle.Text
enteredAdFullName = AdFullName.Text
cmd.Parameters("@AdTitle").Value = selectedAdTitle
cmd.Parameters("@AdFullName").Value = enteredAdFullName
SQL = ""
SQL = SQL & "INSERT INTO InsuredPersons (TransactionID,Title,FullName) VALUES ("
SQL = SQL & "@TransactionID,"
SQL = SQL & "@AdTitle,"
SQL = SQL & "@AdFullName"
SQL = SQL & ")"
cmd.CommandText = SQL
cmd.Connection = db
cmd.ExecuteNonQuery()
Next
AdTitle et AdFullName DonT semblent apporter à travers les valeurs. Il n'y a pas d'erreur, ils ont trouvé le contrôle ok. Ci-dessous le code du fichier ASPX.
<asp:Repeater ID="myRepeater" runat="server">
<ItemTemplate>
<asp:DropDownList ID="AdTitle" runat="server">
<asp:ListItem Selected="True" Value="" Text=""/>
<asp:ListItem Selected="False" Value="Miss" Text="Miss"/>
<asp:ListItem Selected="False" Value="Ms" Text="Ms"/>
<asp:ListItem Selected="False" Value="Mrs" Text="Mrs"/>
<asp:ListItem Selected="False" Value="Mr" Text="Mr"/>
<asp:ListItem Selected="False" Value="Other" Text="Other"/>
</asp:DropDownList>
<asp:TextBox ID="AdFullName" runat="server"></asp:TextBox>
</ItemTemplate>
Edit:
répéteur est construit sur chargement de la page
Dim repeatTimes((TotalAdInsured - 1)) As Integer
myRepeater.DataSource = repeatTimes
myRepeater.DataBind()
DirectCast est fait sur le bouton cliquez sur
Protected Sub continueButtonDetails_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles continueButtonDetails.Click
Réponse: Nous avons dû mettre IsPostBack autour Répéteur Construction
.If Not IsPostBack() Then
Dim repeatTimes((TotalAdInsured - 1)) As Integer
myRepeater.DataSource = repeatTimes
myRepeater.DataBind()
End If
La solution
Tout d'abord, je pense que vous voulez:
myDropDown.SelectedItem.Text
plutôt que
myDropDown.Text
Aussi pourquoi avez-vous deux ItemTemplates? Je ne savais pas que vous pourriez même faire ...
Êtes-vous interagissez avec l'une des zones de texte ou Dropdowns à tout autre moment au cours du cycle de vie de la page?
Essayez de mettre un chèque postback autour du répéteur databinding. Je pense que ce qu'il se passe est votre chargement, les contrôles de façon dynamique, par conséquent, ils n'ont pas viewstate, par conséquent, les valeurs seront toujours vides.
Autres conseils
Assurez-vous que vous êtes en cours d'exécution du code au bon moment dans le cycle de vie de la page. Si vous le faites trop tôt (par exemple dans le OnInit), alors il ne sera pas avoir les valeurs du client encore. Essayez de vous déplacer à votre événement OnCommand () / OnSubmit () et de voir ce qui se passe. Voici quelques références sur la page ASP.NET Cycle de vie: