我无法获得以编程方式生成的项目列表的选定值:
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>
可以正常工作。
我该怎么办?
答案 0 :(得分:1)
您需要使用覆盖CreateChildChild控件或覆盖OnInit方法将项添加到下拉框中。使用PreRender将项添加到列表意味着视图状态将您输入的列表项与从浏览器返回的值连接起来为时已晚。
此外,如果您使用Init方法或CreateChildControls,则您在下拉列表中输入的值将由视图状态保存,因此将井内事物包装在if(!IsPostback)
中希望有道理: - )
答案 1 :(得分:1)
确保为DropDownList启用ViewState。您可能需要重新绑定DropDownList才能获得所选值。
正如迈克尔·爱德华兹所说 - 在举起PreRender事件之前,ViewState已经被保存了。