选中的值在asp:Dropdownlist中不会改变

时间:2009-05-26 09:29:10

标签: asp.net

我有一个简单的下拉列表(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

但无论在下拉列表中点击哪一个,它总是带来第一个值。 请帮忙!

3 个答案:

答案 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