从下拉列表中检索选定的枚举

本文关键字:枚举 检索 下拉列表 | 更新日期: 2023-09-27 17:52:13

我在asp.net 4.0 c#中将枚举绑定到下拉列表

Enumernation是:

public enum Frequency
{
    [Description("Select a frequency")]
    None,
    [Description("Every Hour/Mintues")]
    EveryHourOrMintues, 
    [Description("Previous Day Data")]
    PreviousDayData,
    [Description("Once a week")]
    OnceaWeek
}

从下拉菜单中选择一个值,我想要返回enum值:我是这样做的:

Frequency selectedFrequency;
foreach (Frequency f in Enum.GetValues(typeof(Frequency)))
{
    if (f.ToString().Equals(this.dropDownListFrequency.SelectedValue))
    {
        selectedFrequency = f;
        break;
    }
}

它正在工作,但绝对是一个糟糕的方式,我猜,通过循环遍历enum中的每个项目(即使enum非常小)

如何检索选定的enum,如:

Frequency selectedValue = Enum.GetValues(typeof(Frequency)).Cast<Frequency>().Select(f => f.ToString().Equals(this.dropDownListFrequency.SelectedValue));

我明白上面给出的代码有强制类型转换问题。

编辑要了解更多信息,下面是我如何将enum绑定到下拉列表

var frequencies =  Enum.GetValues(typeof(Frequency)).Cast<Frequency>().Select(f => new
            {
                Text = f.ToDescriptiveTextUsingAttributes(),
                Value = f.ToString()
            });
this.dropDownListFrequency.DataSource=frequencies ;
this.dropDownListFrequency.DataTextField = "Text";
this.dropDownListFrequency.DataValueField = "Value";

ToDescriptiveTextUsingAttributes()是一个扩展方法,返回enum

从下拉列表中检索选定的枚举

的Description属性的值。

如果下拉列表的值是enum的整数表示形式(例如0,1,2…),那么你可以简单地将其强制转换回enum:

Frequency f = (Frequency)int.Parse(dropDownListFrequency.SelectedValue);

如果下拉列表的值是枚举的字符串表示形式(例如:"None", "EveryHourOrMintues"…),那么您可以使用Enum.Parse():

Frequency f = (Frequency)Enum.Parse(
    typeof(Frequency), dropDownListFrequency.SelectedValue);

您可以扩展ListItem类来存储实际的Frequency枚举对象,并将专门的ListItem对象添加到dropDownListFrequency.Items中。当您检索dropdownListFrequency.SelectedItem时,您可以获得选定的实际值。

class FrequencyListItem : System.Web.UI.WebControls.ListItem.ListItem {
    private Frequency _Frequency;
    public Frequency Frequency {
        get { return _Frequency }
    }
    public FrequencyListItem (Frequency f) {
        this._Frequency = f;
        this.Text = f.ToDescriptiveTextUsingAttributes();
        this.Value = f.ToString();
    }
}

由于Items属性中的所有元素都是您的专门化类,因此您可以轻松地检索枚举值,如下所示:

Frequency selectedFrequency = ((FrequencyListItem )this.dropDownListFrequency.SelectedItem).Frequency;

编辑:你甚至可以使用相同的绑定模型,你有一些小的改变:

var frequencies =  Enum.GetValues(typeof(Frequency)).Cast<Frequency>().Select(f => new FrequencyListItem()
            {
                //FrequencyListItem will auto set this in the constructor for you!
                //Text = f.ToDescriptiveTextUsingAttributes(),
                //Value = f.ToString()
            });
this.dropDownListFrequency.DataSource=frequencies;
this.dropDownListFrequency.DataTextField = "Text";
this.dropDownListFrequency.DataValueField = "Value";