Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从下拉列表中检索所选枚举_C#_Asp.net - Fatal编程技术网

C# 从下拉列表中检索所选枚举

C# 从下拉列表中检索所选枚举,c#,asp.net,C#,Asp.net,我正在将枚举绑定到asp.net 4.0 C#中的下拉列表 列举是: public enum Frequency { [Description("Select a frequency")] None, [Description("Every Hour/Mintues")] EveryHourOrMintues, [Description("Previous Day Data")] PreviousDayData, [Descript

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

列举是:

public enum Frequency
{
    [Description("Select a frequency")]
    None,

    [Description("Every Hour/Mintues")]
    EveryHourOrMintues, 

    [Description("Previous Day Data")]
    PreviousDayData,

    [Description("Once a week")]
    OnceaWeek
}
在从下拉列表中选择一个值时,我希望得到相应的枚举值: 我是这样做的:

Frequency selectedFrequency;
foreach (Frequency f in Enum.GetValues(typeof(Frequency)))
{
    if (f.ToString().Equals(this.dropDownListFrequency.SelectedValue))
    {
        selectedFrequency = f;
        break;
    }
}
它工作正常,但我想肯定是一种糟糕的方式,通过循环遍历enum中的每个项(即使enum非常小)

如何检索选定的枚举,如:

Frequency selectedValue = Enum.GetValues(typeof(Frequency)).Cast<Frequency>().Select(f => f.ToString().Equals(this.dropDownListFrequency.SelectedValue));
Frequency-selectedValue=Enum.GetValues(typeof(Frequency)).Cast().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";
var frequencies=Enum.GetValues(typeof(Frequency)).Cast()。选择(f=>new
{
Text=f.ToDescriptiveTextingAttribute(),
值=f.ToString()
});
this.dropDownListFrequency.DataSource=频率;
this.dropDownListFrequency.DataTextField=“Text”;
this.dropDownListFrequency.DataValueField=“Value”;

ToDescriptiveTextingAttributes()是一个扩展方法,它返回枚举的Description属性值

您可以扩展
ListItem
类来存储实际的
频率
枚举对象,并将那些专用的
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";
var frequencies=Enum.GetValues(typeof(Frequency)).Cast()。选择(f=>newfrequencyclistem()
{
//FrequencyListItem将在构造函数中为您自动设置!
//Text=f.ToDescriptiveTextingAttribute(),
//值=f.ToString()
});
this.dropDownListFrequency.DataSource=频率;
this.dropDownListFrequency.DataTextField=“Text”;
this.dropDownListFrequency.DataValueField=“Value”;

您可以扩展
列表项
类来存储实际的
频率
枚举对象,并将那些专门的
列表项
对象添加到
下拉列表频率.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";
var frequencies=Enum.GetValues(typeof(Frequency)).Cast()。选择(f=>newfrequencyclistem()
{
//FrequencyListItem将在构造函数中为您自动设置!
//Text=f.ToDescriptiveTextingAttribute(),
//值=f.ToString()
});
this.dropDownListFrequency.DataSource=频率;
this.dropDownListFrequency.DataTextField=“Text”;
this.dropDownListFrequency.DataValueField=“Value”;

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

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

如果下拉列表的值是枚举的字符串表示形式(例如“无”、“EveryHourOrMintues”…),则可以使用
enum.Parse()


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

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

如果下拉列表的值是枚举的字符串表示形式(例如“无”、“EveryHourOrMintues”…),则可以使用
enum.Parse()


如果
SelectedValue
有0、1、2个值被设置回原位,则此操作应有效->
selectedFrequency=Convert.ToInt32(此.dropDownListFrequency.SelectedValue)?如果
SelectedValue
有0、1、2个值被设置回原位,则此操作应有效->
selectedFrequency=Convert.ToInt32(此.dropDownListFrequency.SelectedValue)