如何循环访问标志枚举并创建针对每个值适当选中的复选框

本文关键字:复选框 创建 循环 何循环 访问 枚举 标志 | 更新日期: 2023-09-27 18:33:08

我有一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类型。

在我看来,我需要为一周中的每一天创建一个复选框,并根据保存的天数以某种方式适当地选中这些框。

我该怎么做?

如何循环访问标志枚举并创建针对每个值适当选中的复选框

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

这是我想到的:

@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 })
    }
}

循环中的条件语句是为了确保只显示实际日期。

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

您可以

像这样遍历Enum

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

您还可以Pars并将string转换回您的Enum

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

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

我对你的问题

和项目架构知之甚少,由你来调整这些选项以适应你的问题。我希望这有所帮助。

这是一个

相当手动的过程...要检查是否选择了星期日,例如:

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