ASP.NET Localizar DropDown valor dentro Repeater Controle Parte II
-
06-09-2019 - |
Pergunta
Eu tive algumas perguntas sobre o assunto, continua a ter problemas.
Eu quero encontrar os valores de uma série de controles suspensos e caixa de texto dentro de um controle de repetidora.
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 não parecem estar trazendo através dos valores. Não há nenhum erro para que eles tenham encontrado o ok controle. Abaixo está o código arquivo 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 é construído no carregamento da página
Dim repeatTimes((TotalAdInsured - 1)) As Integer
myRepeater.DataSource = repeatTimes
myRepeater.DataBind()
DirectCast é feito em clique do botão
Protected Sub continueButtonDetails_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles continueButtonDetails.Click
Resposta:. Tinha que colocar IsPostback torno Repeater Construção
If Not IsPostBack() Then
Dim repeatTimes((TotalAdInsured - 1)) As Integer
myRepeater.DataSource = repeatTimes
myRepeater.DataBind()
End If
Solução
Em primeiro lugar eu acho que você quer:
myDropDown.SelectedItem.Text
em vez de
myDropDown.Text
Além disso, por que você tem duas ItemTemplates? Eu não sabia que você poderia mesmo fazer isso ...
Você está interagindo com qualquer uma das caixas de texto ou DropDowns em qualquer outro momento durante o ciclo de vida de página?
Tente colocar um PostBack verificar em torno da ligação de dados repetidor. Eu acho que o que está acontecendo é o seu carregamento dos controles dinamicamente, portanto, eles não têm viewstate, portanto, os valores serão sempre vazia.
Outras dicas
Verifique se o seu está executando o código no ponto correto no ciclo de vida da página. Se você está fazendo isso muito cedo (por exemplo, no OnInit), então não vai ter os valores do cliente ainda. Tente movê-lo para o seu OnCommand () / OnSubmit () evento e ver o que acontece. Aqui estão algumas referências sobre ASP.NET página Ciclo de Vida: