我有一个简单的下拉列表(ffg)...
<asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="true" BackColor="LightSteelBlue" Font-Size="X-Small"
OnSelectedIndexChanged="DropDownList2_SelectedIndexChanged1" Style="z-index: 102; left: 37px; position: absolute; top: 85px" Width="331px"
</asp:DropDownList>
我将数据绑定到onpageload事件......
DropDownList2.DataSource = td.DataSet
DropDownList2.DataSource = td
DropDownList2.DataTextField = td.Columns("Name").ColumnName.ToString
DropDownList2.DataValueField = td.Columns("VendorCode").ColumnName.ToString
DropDownList2.DataBind()
和onleselectedindexchaged
事件,我试图像这样检索新值......
Protected Sub DropDownList2_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DropDownList2.TextChanged
Dim url As String = "sp_menu.aspx?sp=" & DropDownList2.SelectedValue
Session.Remove("sp")
Session("sp") = DropDownList2.SelectedValue
Session("spnm") = DropDownList2.SelectedItem.Text & " (" & DropDownList2.Text & ")"
Response.Redirect(url)
End Sub
但无论在下拉列表中点击哪一个,它总是带来第一个值。 请帮忙!
答案 0 :(得分:10)
好的...一些事情......
首先
DropDownList2_TextChanged
没有连接到你的DropDownList,所以除非你在代码隐藏中进行连接,否则我无法看到该事件是如何触发的
第二
你在这里说这段代码
DropDownList2.DataSource = td.DataSet
DropDownList2.DataSource = td
DropDownList2.DataTextField = td.Columns("Name").ColumnName.ToString
DropDownList2.DataValueField = td.Columns("VendorCode").ColumnName.ToString
DropDownList2.DataBind()
在您的PageLoad事件中。你把它包裹在If Not IsPostBack
中,
因为如果没有,那么你每次都会重新绑定,并失去之前的选择。
答案 1 :(得分:5)
当您在Page_Load中进行数据绑定时,您基本上也会重置选定项目。
你应该将Page_Load中存在的任何绑定代码包装在一个 if(!IsPostBack)阻止。
编辑:...或如果不是IsPostBack然后......如果在VB.NET中结束
答案 2 :(得分:3)
你可以尝试使用
DropDownList2.SelectedItem.Value
而不是
DropDownList2.SelectedItem.Text