我有代码可为任何给定的枚举提供所有可能值的列表
我经常将其绑定到我的网页中的下拉列表
现在,我试图制作一个接受类型名称作为参数的usercontrol,又调用代码以创建值列表
正如我的潜艇期望的类型参数

Shared Function EnumList(ByVal EnumType As Type) As List(Of ListItem)
        Dim ret As New List(Of ListItem)
        Dim consts = [Enum].GetValues(EnumType)
            For Each c In consts
                ret.Add(New ListItem With {.Text = c.ToString, .Value = c.ToString})
            Next
        Return ret
    End Function

我试图将USERCORTROLS中使用的字符串声明转换为一种类型。问题是我只能使用系统类型(即使是非Mscorlib,有点笨拙)。但是对于我的app_code中声明的枚举,我无法弄清楚这样做的方法
AQN用这样的有趣代码制作一些字符串(Astrodate是我班级的名称):
“ Astrodate,App_code.rujpwg3d,版本= 0.0.0.0,文化=中性,publicKeytoken = null”
但是,如果我在getType中使用它,它会出错

请指教

编辑 这是USERCORTROL中的代码,试图获取枚举列表

    Sub RefillData()
    Dim TempValue = Value
    MainList.Items.Clear()
    MainList.DataSource = EnumList(Type.GetType(EnumType, True, True))
    If EmptyText <> "" Then
        Dim itm As New ListItem(EmptyText, "")
        MainList.Items.Add(itm)
    End If
    MainList.DataBind()
    Value = TempValue
End Sub

“ EnumType”是页面上UserControl的声明中传递的字符串属性。

有帮助吗?

解决方案 2

这是代码

Dim ax = Reflection.Assembly.Load(ObjectType.Account.GetType.Assembly.FullName)
Dim tx = ax.GetType(EnumType)
Dim enumers = [Enum].GetNames(tx)
System.Array.Sort(enumers)
e.Result = enumers

objectType.Account只是我系统中的任何枚举,您可以使用任何您想要的

谢谢大家的尝试

其他提示

我很难理解您确切想做的事情。所以,我正在猜测:

您有一个USERCONTROL,该USERCONTROL会根据您提供的枚举类型创建DrowdownList。但是,您很难读回它。

我创建了一个有效的示例,这可能对您有帮助:

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="WebForm1.aspx.vb" Inherits="WebApplication2.WebForm1" %>

<%@ Register src="DynamicComboFromEnum.ascx" tagname="DynamicComboFromEnum" tagprefix="uc1" %>

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">
<title></title>

</head>

<body>
<form id="form1" runat="server">
<div>    
    <uc1:DynamicComboFromEnum ID="DynamicComboFromEnum1" runat="server" />
    <asp:Button ID="Button1" runat="server" Text="Button" />
    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>    
</div>
</form>

</body>

</html>

背后的代码:

Public Enum TestEnum
Value1
Value2
Value3
Value4
Value5

结束枚举

公共类WebForm1继承System.Web.ui.page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If (Not Page.IsPostBack) Then
        DynamicComboFromEnum1.EnumType = GetType(TestEnum)
    End If
End Sub

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
    Label1.Text = DynamicComboFromEnum1.GetSelectedValue().ToString()
End Sub

最终课程

用户控制:

Public Class DynamicComboFromEnum
Inherits System.Web.UI.UserControl

Public Property EnumType() As Type
    Get
        Return ViewState("EnumType")
    End Get
    Set(ByVal value As Type)
        ViewState("EnumType") = value
    End Set
End Property

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If (Not Page.IsPostBack) Then
        RefillData()
    End If
End Sub

Sub RefillData()
    MainList.Items.Clear()
    MainList.DataSource = EnumList(EnumType)
    MainList.DataBind()
End Sub

Private Function EnumList(ByVal type As Type) As Object
    Dim Names As String() = [Enum].GetNames(type)
    Return Names
End Function

Public Function GetSelectedValue() As Object
    Return [Enum].Parse(EnumType, MainList.SelectedValue)
End Function

最终课程

<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="DynamicComboFromEnum.ascx.vb" Inherits="WebApplication2.DynamicComboFromEnum" %>

<asp:DropDownList ID="MainList" runat="server"></asp:DropDownList>

我不确定发生了什么,但是我在粘贴代码时遇到了问题。因此,请裸露它,如果有人可以为我修理!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top