ASP.NET finden DropDown Wert Innerhalb Repeater Control Part II
-
06-09-2019 - |
Frage
ive hatte ein paar Fragen zu diesem Thema nach wie vor Probleme.
Ich mag die Werte aus einer Reihe von Drop-Down-und Textboxsteuerelemente in einem Repeater-Steuerelement zu finden.
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 und AdFullName scheinen nicht über die Werte zu bringen. Es gibt keine Fehler, so dass sie die Kontrolle ok gefunden haben. Im Folgenden finden Sie die ASPX-Datei Code.
<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:
Repeater ist auf Seite Last konstruiert
Dim repeatTimes((TotalAdInsured - 1)) As Integer
myRepeater.DataSource = repeatTimes
myRepeater.DataBind()
Direct auf Tastenklick gemacht
Protected Sub continueButtonDetails_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles continueButtonDetails.Click
Antwort: Hat um Repeater Construction setzen IsPostBack
.If Not IsPostBack() Then
Dim repeatTimes((TotalAdInsured - 1)) As Integer
myRepeater.DataSource = repeatTimes
myRepeater.DataBind()
End If
Lösung
Zunächst einmal ich glaube, Sie wollen:
myDropDown.SelectedItem.Text
lieber als
myDropDown.Text
Auch warum haben Sie zwei ItemTemplates? Ich wusste nicht, man konnte sogar das tun ...
Sind Sie mit einem der Textfelder oder Dropdowns an jedem anderen Punkt während des Seitenlebenszyklus interagieren?
Versuchen Sie, eine Postback Kontrolle um die Repeater Datenbindung setzen. Ich denke, was passiert Ihr Laden ist dynamisch die Steuerelemente, damit sie keine Ansichtszustand haben, daher sind die Werte immer leer sein.
Andere Tipps
Stellen Sie sicher, dass Sie den Code an der richtigen Stelle in der Seite Lebenszyklus ausgeführt werden. Wenn Sie es noch zu früh (zum Beispiel in der OnInit) tun, dann wird es nicht die Werte aus dem Client zugeordnet. Versuchen Sie es zu Ihrem OnCommand () / OnSubmit () Ereignis zu bewegen und sehen, was passiert. Hier sind einige Hinweise auf ASP.NET Seite Lebenszyklus: