ASP.NET 在 Repeater 控件中查找下拉值第二部分
-
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
此外,为什么你有两个的ItemTemplate?我不知道你甚至可以做到这一点...
您有任何在任何其他点的文本框或下拉菜单的页面生命周期中的交互?
尝试把一个回发检查围绕中继器的数据绑定。我觉得发生了什么是你的加载控件动态,因此他们没有视图状态,因此该值将永远是空的。
其他提示
确保您在页面生命周期的正确位置运行代码。如果您做得太早(例如在 OnInit 中),那么它还没有来自客户端的值。尝试将其移至 OnCommand()/OnSubmit() 事件,看看会发生什么。以下是有关 ASP.NET 页面生命周期的一些参考:
不隶属于 StackOverflow