如何在C#中将dropDownlist映射到枚举?

时间:2013-12-05 11:43:41

标签: c# asp.net

我已将下拉列表绑定到星期几的枚举中,如下所示:

    private void BindDayOfWeek()
    {
        this.ddlDayOfWeek.DataSource = GetWeekDays();
        this.ddlDayOfWeek.DataBind();
    }

    private List<DayOfWeek> GetWeekDays()
    {
        return Enum.GetValues(typeof(DayOfWeek)).Cast<DayOfWeek>().ToList();
    }

现在我想读取枚举DayOfWeek中所选工作日(来自下拉列表)的int值,即如果我从下拉列表中选择“Sunday”,我应该能够选择“星期日”的int值。 enum DaysOfWeek(不是ddlDayOfWeek.selectedValue或SelectedIndex)

如果没有开关和if(我认为可以是单向的),我怎么能这样做?

2 个答案:

答案 0 :(得分:7)

由于SelectedValue是一个字符串,您需要先将其解析为int。然后你只需要把它投射到DayOfWeek

if(ddlDayOfWeek.SelectedIndex >= 0)
{
    int selectedDay = int.Parse(ddlDayOfWeek.SelectedValue);
    DayOfWeek day = (DayOfWeek) selectedDay;
}

如果你没有将DataTextFieldDataValueField(你应该做什么)分开,你可以解析string中显示的DropDownList“星期日”{ {1}}通过DayOfWeek

Enum.Parse

修改:以下是一种如何从枚举设置DayOfWeek selectedDay = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), ddlDayOfWeek.SelectedValue); 的方法:

DataTextField/DataValueField

答案 1 :(得分:0)

private void BindDayOfWeek()
{
    this.ddlDayOfWeek.DataSource = GetWeekDays();
    this.ddlDayOfWeek.DataTextField = DayOfWeek;
    this.ddlDayOfWeek.DataValueField = (int)DayOfWeek.ToString();
    this.ddlDayOfWeek.DataBind();
}

将绑定代码更改为上述代码。这样,下拉列表中的所选项目(如所有项目)将具有将向用户显示的文本值以及该值的值,您可以将其作为服务器端。项目的属性值将为您提供所选日期的编号。