0

我正在使用枚举中的设置来填充 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 无关。

4

1 回答 1

0

我发现了这个问题(而且我没有提供足够的代码让你自己找到它)。

基本上,我对一周中的每一天都有一个下拉列表,上面的 ConvertEnumToArray 返回的列表项被添加到每个下拉列表中。结果,所有下拉列表中的选定项目都发生了更改,因为每个下拉列表中都有相同的列表项。将它们添加到下拉列表中作为新列表项解决了问题。

于 2013-10-03T18:27:10.440 回答