如何遍历标志的枚举并创建为每个值进行适当检查的复选框?

时间:2013-09-27 17:18:03

标签: c# asp.net-mvc razor enums flags

我有Enum个标记来表示一周中的几天,还有一些额外的值表示工作日,周末,每天或没有天。

这是Enum

[Flags]
public enum DayOfWeek : short
{
    Sunday = 1,
    Monday = 2,
    Tuesday = 4,
    Wednesday = 8,
    Thursday = 16,
    Friday = 32,
    Saturday = 64,
    Weekday = 62,
    Weekend = 65,
    Everyday = 127,
    None = 0
}

我还有一个视图模型,其属性DayOfWeek的类型为DayOfWeek

在我的视图中,我需要为一周中的每一天创建一个复选框,并根据保存的日期以某种方式适当地检查框。

我该怎么做?

3 个答案:

答案 0 :(得分:5)

我找到了一个很好的解决方案。

以下是我提出的建议:

@foreach (DayOfWeek item in Enum.GetValues(typeof(DayOfWeek)))
{
    if (0 < item && (item <= DayOfWeek.Friday || item == DayOfWeek.Saturday))
    {
        @Html.Label("DayOfWeek", item.ToString())
        @Html.CheckBox("DayOfWeek", (Model.DayOfWeek.HasFlag(item)), new { value = item })
    }
}

循环中的条件语句是确保只显示实际天数。

这适用于我的目的,并且该概念可以轻松应用于其他枚举。具体的实现需要一些改变,但你明白了。

答案 1 :(得分:0)

您可以像这样迭代Enum

foreach (var val in typeof(DayOfWeek).GetEnumNames())
               ....

您也可以Parsstring转换回Enum

var day = Enum.Parse(typeof(DayOfWeek) , yourString);

yourstring可以是您想要的任何内容,例如checkbox的名称。

我不太了解您的问题和项目架构,您可以根据自己的问题调整这些选项。我希望这会有所帮助。

答案 2 :(得分:-1)

这是一个相当手动的过程......要检查周日是否被选中,例如:

bool isSunday = (dayOfWeekEnum & DayOfWeek.Sunday) == DayOfWeek.Sunday;