ASP.NET DropDownList使用枚举选择的值

时间:2013-10-02 19:27:01

标签: asp.net vb.net .net-4.0 enums

我正在使用枚举中的设置来填充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而导致异常。 / LI>
  • 在添加ClearSelection()和SelectedIndex = -1行之前,我设置所选值(通过上面的FindByValue或直接设置SelectedValue)导致我所选的值被忽略。

有什么想法?感谢。

编辑:我错过了上面的(坏内存):直接设置SelectedValue会导致它被忽略。它与ClearSelection或SelectedIndex = 1无关,正如我在上面的第二个子弹中所述。

1 个答案:

答案 0 :(得分:0)

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

基本上,我有一周的每一天的下拉列表,上面的ConvertEnumToArray返回的列表项被添加到每个下拉列表中。因此,所有下拉列表中的所选项目都已更改,因为每个下拉列表中都有相同的列表项。当New Listitems解决问题时,将它们添加到下拉列表中。