Question

Ive a eu quelques questions à ce sujet, encore des problèmes.

Je veux trouver les valeurs d'un certain nombre de contrôles de liste déroulante et TextBox dans un contrôle répéteur.

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 et AdFullName DonT semblent apporter à travers les valeurs. Il n'y a pas d'erreur, ils ont trouvé le contrôle ok. Ci-dessous le code du fichier 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>

Edit:

répéteur est construit sur chargement de la page

    Dim repeatTimes((TotalAdInsured - 1)) As Integer

    myRepeater.DataSource = repeatTimes
    myRepeater.DataBind()

DirectCast est fait sur le bouton cliquez sur

Protected Sub continueButtonDetails_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles continueButtonDetails.Click

Réponse: Nous avons dû mettre IsPostBack autour Répéteur Construction

.
If Not IsPostBack() Then

        Dim repeatTimes((TotalAdInsured - 1)) As Integer

        myRepeater.DataSource = repeatTimes
        myRepeater.DataBind()

    End If
Était-ce utile?

La solution

Tout d'abord, je pense que vous voulez:

myDropDown.SelectedItem.Text

plutôt que

myDropDown.Text

Aussi pourquoi avez-vous deux ItemTemplates? Je ne savais pas que vous pourriez même faire ...

Êtes-vous interagissez avec l'une des zones de texte ou Dropdowns à tout autre moment au cours du cycle de vie de la page?

Essayez de mettre un chèque postback autour du répéteur databinding. Je pense que ce qu'il se passe est votre chargement, les contrôles de façon dynamique, par conséquent, ils n'ont pas viewstate, par conséquent, les valeurs seront toujours vides.

Autres conseils

Assurez-vous que vous êtes en cours d'exécution du code au bon moment dans le cycle de vie de la page. Si vous le faites trop tôt (par exemple dans le OnInit), alors il ne sera pas avoir les valeurs du client encore. Essayez de vous déplacer à votre événement OnCommand () / OnSubmit () et de voir ce qui se passe. Voici quelques références sur la page ASP.NET Cycle de vie:

  1. http://msdn.microsoft.com/en-us/library /ms178472.aspx
  2. http://www.15seconds.com/issue/020102.htm
  3. http://www.beansoftware.com/ASP .NET Tutoriels / page-vie-Cycle.aspx
  4. Image du cycle de vie de la page asp.net
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top