0
我正在使用枚举中的设置来填充ASP.NET 4.0中的下拉列表。我遇到的问题是,当我尝试设置除第一项以外的选定值时,它会引发错误,告诉我它不能选择多个选项。ASP.NET DropDownList枚举的选定值
下面的代码的示例:
Public Shared Function ConvertEnumToArray(ByVal enumType As System.Type, _
Optional ByVal DefaultValue As String = "nodefault", _
Optional ByVal PromptValue As String = "", _
Optional ByVal PromptText As String = "") As ListItem()
Dim itemSelected As Boolean = False
Dim i As Int32 = 0
If Not enumType.IsEnum Then
Throw New Exception(String.Format("Type {0} is not an enumeration.", enumType.Name))
End If
'Dim itemValues() As Array = [Enum].GetValues(enumType)
Dim fields As FieldInfo() = enumType.GetFields()
Dim itemNames() As String = [Enum].GetNames(enumType)
Dim arr(itemNames.Length + 1) As ListItem
For Each field As FieldInfo In fields
If Not field.Name.Equals("value__") Then
Dim item As New ListItem(field.Name, field.GetRawConstantValue().ToString())
If item.Value = DefaultValue And DefaultValue <> "nodefault" Then
item.Selected = True
itemSelected = True
End If
arr(i) = item
i = i + 1
End If
Next
If PromptText <> "" Then
Dim item As New ListItem(PromptText, PromptValue)
If Not itemSelected Then
item.Selected = True
End If
arr(i) = item
End If
Return arr
End Function
Dim arrExtraChargesOptions() As ListItem
arrExtraChargesOptions = Enumerations.ConvertEnumToArray(GetType(Enumerations.MoneyRoomCourierExtraChargesOptions))
For Each li As ListItem In arrExtraChargesOptions
'since arrays double in capacity to store data, there may be nulls
If Not li Is Nothing Then
Me.drpMondayExtraCharges.Items.Add(li)
End If
Next
Me.drpMondayExtraCharges.ClearSelection()
Me.drpMondayExtraCharges.SelectedIndex = -1
Me.drpMondayExtraCharges.Items.FindByValue(Courier.MondayExtraCharge.ToString()).Selected = True
尽管以多种方式清除选择的值,第一个项目保持选定导致误差,如上所述。
其他项目,这可能有助于解释我如何结束了与上面的代码:
- 我的函数的返回类型设置为一个数组,因为这就是参数类型的下拉列表中的AddRange功能。项目期望,但是当我使用该方法时,由于数组中的NULL而导致异常。
- 在添加ClearSelection()和SelectedIndex = -1行之前,我通过设置选定值(通过上面的FindByValue或直接设置SelectedValue)导致我所需的选定值被忽略。
有什么想法?谢谢。
编辑:我错过了上面(坏记忆):直接设置SelectedValue结果是什么结果被忽略。它与ClearSelection或SelectedIndex = 1无关,正如我在上面第二个项目中所述。
稍微改变一下,我还会在添加列表项之前调用List上的Clear。即Me.drpMondayExtraCharges.Items.Clear() –
这是在页面的初始加载,所以项目列表清除,直到我添加上述项目。 –
Gotcha我猜这是我为避免重复列表项目而习惯的那些事情之一。我倾向于是一个腰带和吊带类型的家伙。 –