从ASP.NET DropDownList获取选定的值

时间:2009-10-02 14:17:18

标签: .net asp.net vb.net drop-down-menu

我无法获得以编程方式生成的项目列表的选定值:

Protected Sub ddlMMMYY2_PreRender(ByVal sender As Object, ByVal e 
                                As System.EventArgs) Handles ddlMMMYY2.PreRender
    If Not Page.IsPostBack Then
        'Value= 08.2009 Text=Aug 09
        Dim d As Date
        d = Now

        Dim myDay As Date
        Dim myDayStr As String
        Dim myDayValue As String

        Dim i As Integer
        For i = 0 To 15
            myDay = d.AddMonths(i)
            myDayValue = myDay.ToString("MM.yyyy")
            myDayStr = myDay.ToString("MMMM yyyy")

            Dim item As ListItem = New ListItem
            item.Text = myDayStr
            item.Value = myDayValue
            Me.ddlMMMYY2.Items.Add(item)
        Next

        If Not Request.QueryString("Abreise") Is Nothing Then
            Dim Anreise As String = Request.QueryString("Abreise")
            Dim myArray As Array
            myArray = Split(Anreise, ".")
            Me.ddlMMMYY2.Items.FindByValue(myArray(1).ToString & "." 
                                      & myArray(2).ToString).Selected = True
        End If

    End If
End Sub

如果我尝试从静态DropDownList获取值,<asp:listitem>可以正常工作。

我该怎么办?

2 个答案:

答案 0 :(得分:1)

您需要使用覆盖CreateChildChild控件或覆盖OnInit方法将项添加到下拉框中。使用PreRender将项添加到列表意味着视图状态将您输入的列表项与从浏览器返回的值连接起来为时已晚。

此外,如果您使用Init方法或CreateChildControls,则您在下拉列表中输入的值将由视图状态保存,因此将井内事物包装在if(!IsPostback)

希望有道理: - )

答案 1 :(得分:1)

确保为DropDownList启用ViewState。您可能需要重新绑定DropDownList才能获得所选值。

正如迈克尔·爱德华兹所说 - 在举起PreRender事件之前,ViewState已经被保存了。