ASP.NET Найдите раскрывающееся значение внутри элемента управления повторителем, часть II

StackOverflow https://stackoverflow.com/questions/932503

  •  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:

  1. http://msdn.microsoft.com/en-us/library/ms178472.aspx
  2. http://www.15секунды.com/issue/020102.htm
  3. http://www.beansoftware.com/ASP.NET-Tutorials/Page-Life-Cycle.aspx
  4. Изображение жизненного цикла страницы asp.net
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top