ASP.NET Trova DropDown valore all'interno del ripetitore di controllo Parte II
-
06-09-2019 - |
Domanda
Ive ha avuto alcune domande su questo argomento, ancora problemi.
Voglio trovare i valori da una serie di controlli a discesa e TextBox in un controllo ripetitore.
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 e AdFullName non sembrano essere portare attraverso i valori. Non v'è alcun errore in modo che hanno trovato il controllo ok. Di seguito è riportato il codice del file 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>
Modifica:
Repeater è costruito su caricamento della pagina
Dim repeatTimes((TotalAdInsured - 1)) As Integer
myRepeater.DataSource = repeatTimes
myRepeater.DataBind()
DirectCast è fatto su clic del pulsante
Protected Sub continueButtonDetails_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles continueButtonDetails.Click
Risposta: ha dovuto mettere IsPostBack intorno Ripetitore Edilizia
.If Not IsPostBack() Then
Dim repeatTimes((TotalAdInsured - 1)) As Integer
myRepeater.DataSource = repeatTimes
myRepeater.DataBind()
End If
Soluzione
Prima di tutto credo che si desidera:
myDropDown.SelectedItem.Text
piuttosto che
myDropDown.Text
Anche perché hai due ItemTemplates? Non sapevo che si potrebbe anche farlo ...
Stai interagendo con una qualsiasi delle caselle di testo o DropDowns in qualsiasi altro punto nel corso del ciclo di vita pagina?
Prova a mettere un assegno PostBack intorno alla associazione dati ripetitore. Penso che che cosa sta accadendo è il vostro carico i controlli in modo dinamico, quindi non hanno ViewState, quindi, i valori saranno sempre vuota.
Altri suggerimenti
Assicurati che il tuo sono in esecuzione il codice nel punto corretto nel ciclo di vita pagina. Se si sta facendo troppo presto (per esempio nel OnInit) allora non avrà ancora i valori del cliente. Provare a spostare al vostro OnCommand () / OnSubmit) evento (e vedere cosa succede. Qui ci sono alcuni riferimenti sulla pagina ASP.NET ciclo di vita: