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
また、なぜあなたは2 ItemTemplatesがありますか?私はあなたがそれを行うことさえ知らなかった...
は、ページのライフサイクルの間に、他の時点でのTextBoxまたはドロップダウンのいずれかと相互作用するされていますか?
リピータデータバインディングの周りにポストバックチェックを入れてみてください。私はそのための値は常に空になり、したがって、彼らは何のビューステートを持っていない、起こっては、あなたのコントロールを動的にロードされていただきましだと思います。
他のヒント
ページのライフサイクルの正しい時点でコードを実行していることを確認してください。これを行うのが早すぎる場合 (たとえば、OnInit など)、クライアントからの値がまだ含まれていません。これを OnCommand()/OnSubmit() イベントに移動して、何が起こるかを確認してください。ASP.NET ページのライフ サイクルに関する参考資料は次のとおりです。
所属していません StackOverflow