ASP.NET Encuentra desplegable Valor Dentro repetidor de control de la Parte II
-
06-09-2019 - |
Pregunta
he tenido un par de preguntas sobre este tema, sigue teniendo problemas.
Quiero encontrar los valores de una serie de controles desplegables y cuadro de texto dentro de un control repetidor.
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 y AdFullName no se parecen estar llevando a través de los valores. No hay error por lo que han encontrado el control en buen estado. A continuación se muestra el código del archivo 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>
Editar:
Repeater se construye en carga de la página
Dim repeatTimes((TotalAdInsured - 1)) As Integer
myRepeater.DataSource = repeatTimes
myRepeater.DataBind()
DirectCast se realiza en clic de botón
Protected Sub continueButtonDetails_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles continueButtonDetails.Click
Respuesta: tenía que poner IsPostBack alrededor repetidor de construcción
.If Not IsPostBack() Then
Dim repeatTimes((TotalAdInsured - 1)) As Integer
myRepeater.DataSource = repeatTimes
myRepeater.DataBind()
End If
Solución
En primer lugar creo que quieres:
myDropDown.SelectedItem.Text
lugar de
myDropDown.Text
Además, ¿por qué tiene dos ItemTemplates? No sabía incluso se podría hacer eso ...
¿Está interactuando con cualquiera de los cuadros de texto o menús desplegables en cualquier otro momento durante el ciclo de vida de la página?
Trate de poner un cheque de devolución de datos alrededor del enlace de datos repetidor. Creo qué está sucediendo es su carga de los controles de forma dinámica, por lo tanto, no tienen ningún estado de vista, por lo tanto, los valores siempre estarán vacías.
Otros consejos
Asegúrese de que está ejecutando su código en el punto correcto en el ciclo de vida de la página. Si usted lo está haciendo demasiado pronto (por ejemplo en el OnInit) entonces no va a tener los valores desde el cliente todavía. Trate de mover a su caso bajo demanda () / OnSubmit () y ver qué pasa. Aquí hay algunas referencias en la página ASP.NET Ciclo de Vida: