MVC 枚举标志:为什么第一个枚举值始终为真?
MVC enum flags: Why is the first enum value always true?
所以,我有一个标记的枚举:
[Flags]
public enum SiteVisibilityFlags : short
{
None = 0,
Corporate = 1,
Properties = 2,
Kiosk = 4
}
问题是,无论我如何设置,'None' 始终为真...无论如何。假设我这样设置:
..., SiteVisibilityFlags = Enums.SiteVisibilityFlags.Corporate ...
然后尝试查看:
<dd>
@foreach (Enums.SiteVisibilityFlags svf in Enum.GetValues(typeof(Enums.SiteVisibilityFlags)))
{
@Html.CheckBox("SiteVisibilityFlags", (Model.SiteVisibilityFlags.HasFlag(svf)), new { value = svf, disabled = "disabled" })
@Html.Label("SiteVisibilityFlagsLabel", svf.ToString())
@:
}
</dd>
在这里,Model.SiteVisibilityFlags.HasFlag(svf) 对于 'None' 总是正确的,但不应该如此。在数据库中验证,值为“1”...但仍检查 None。我已经尝试了 Corporate、Properties 和 Kiosk 的单个和组合的每个排列,复选框按预期工作,根据标志值选中和取消选中,但 'None' 始终是 checked/true.
我错过了什么?
根据 this article 标记的枚举应该以“1”而不是“0”开头,因为它会导致问题。
所以,我有一个标记的枚举:
[Flags]
public enum SiteVisibilityFlags : short
{
None = 0,
Corporate = 1,
Properties = 2,
Kiosk = 4
}
问题是,无论我如何设置,'None' 始终为真...无论如何。假设我这样设置:
..., SiteVisibilityFlags = Enums.SiteVisibilityFlags.Corporate ...
然后尝试查看:
<dd>
@foreach (Enums.SiteVisibilityFlags svf in Enum.GetValues(typeof(Enums.SiteVisibilityFlags)))
{
@Html.CheckBox("SiteVisibilityFlags", (Model.SiteVisibilityFlags.HasFlag(svf)), new { value = svf, disabled = "disabled" })
@Html.Label("SiteVisibilityFlagsLabel", svf.ToString())
@:
}
</dd>
在这里,Model.SiteVisibilityFlags.HasFlag(svf) 对于 'None' 总是正确的,但不应该如此。在数据库中验证,值为“1”...但仍检查 None。我已经尝试了 Corporate、Properties 和 Kiosk 的单个和组合的每个排列,复选框按预期工作,根据标志值选中和取消选中,但 'None' 始终是 checked/true.
我错过了什么?
根据 this article 标记的枚举应该以“1”而不是“0”开头,因为它会导致问题。