ASP.NET Найдите раскрывающееся значение внутри элемента управления повторителем, часть II
-
06-09-2019 - |
Вопрос
У меня было несколько вопросов по этой теме, но проблемы все еще возникают.
Я хочу найти значения из ряда элементов управления раскрывающимся списком и текстовым полем внутри элемента управления повторителем.
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 и AdFullName, похоже, не передают значения.Ошибки нет, поэтому они считают, что управление в порядке.Ниже приведен код файла 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>
Редактировать:
Повторитель создается при загрузке страницы.
Dim repeatTimes((TotalAdInsured - 1)) As Integer
myRepeater.DataSource = repeatTimes
myRepeater.DataBind()
DirectCast выполняется при нажатии кнопки
Protected Sub continueButtonDetails_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles continueButtonDetails.Click
Отвечать:Пришлось подключить IsPostback к построению повторителя.
If Not IsPostBack() Then
Dim repeatTimes((TotalAdInsured - 1)) As Integer
myRepeater.DataSource = repeatTimes
myRepeater.DataBind()
End If
Решение
Прежде всего, я думаю, вы хотите:
myDropDown.SelectedItem.Text
Скорее, чем
myDropDown.Text
И почему у вас есть два ItemTemplates?Я даже не знала, что ты можешь это сделать...
Взаимодействовали ли вы с какими-либо текстовыми полями или раскрывающимися списками на каком-либо другом этапе жизненного цикла страницы?
Попробуйте поставить проверку PostBack вокруг привязки данных ретранслятора.Я думаю, что происходит то, что вы динамически загружаете элементы управления, поэтому у них нет состояния просмотра, поэтому значения всегда будут пустыми.
Другие советы
Убедитесь, что вы запускаете свой код на нужном этапе жизненного цикла страницы.Если вы делаете это слишком рано (например, в OnInit), тогда у него еще не будет значений от клиента.Попробуйте переместить его в событие OnCommand()/OnSubmit() и посмотрите, что произойдет.Вот несколько ссылок на жизненный цикл страницы ASP.NET: