我正在使用枚举中的设置来填充 ASP.NET 4.0 中的下拉列表。我遇到的问题是,当我尝试设置第一项以外的选定值时,它会抛出一个错误,告诉我它不能选择多个选项。
这是代码示例:
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
尽管以多种方式清除了选定的值,但第一项仍保持选中状态,从而导致上述错误。
其他可能有助于解释我如何使用上面的代码的项目:
- 我将函数的返回类型设置为数组,因为这是 DropdownList.Items 上的 AddRange 函数所期望的参数类型,但是当我使用该方法时,由于数组中的 NULL 导致异常。
- 在添加 ClearSelection() 和 SelectedIndex = -1 行之前,我设置选定的值(通过上面的 FindByValue 或直接设置 SelectedValue)导致我想要的选定值被忽略。
有什么想法吗?谢谢。
编辑:我在上面说错了(记错了):直接设置 SelectedValue 是导致它被忽略的原因。正如我在上面的第二个项目符号中所述,它与 ClearSelection 或 SelectedIndex =1 无关。