Вопрос

У меня есть код, который дает список всех возможных значений для любого данного момента
Я привязан к нему, чтобы выпадать в мои веб-страницы
Теперь я пытаюсь сделать 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

Я пытаюсь перевернуть строку, используемую в цестерении usercontrols в тип. Проблема в том, что я могу сделать это только с типовыми системами (даже не Mscorlib, немного неуклюже). но для enums, объявленных в моем App_Code, я не могу выяснить способ сделать это
AQN делает некоторую строку с забавным кодом, как это (Asorodate - это имя моего класса):
«ASTRODATE, APP_CODE.RUJPWG3D, версия = 0,0.0.0, Культура = Нейтральная, PublicHyToken = Null»
Но если я использую его в gettype, это ошибки

пожалуйста, порекомендуйте

Редактировать Вот код в usercontrol, пытаясь получить список enum

    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 - это просто любое enum в моей системе, вы можете использовать то, что вы хотите

спасибо всем за попытку

Другие советы

У меня были трудности понимать то, что вы именно хотели сделать. Итак, я думаю:

У вас есть один USERCONTROL, который создает DrowDownList на основе предоставленного вами типа Enum. Но у вас были трудности, читая его обратно.

Я создал рабочий образец, который может быть полезным для вас:

<%@ 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

Заканчивать

Public Class WebForm1 наследует System.Web.ui.wage

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