【发布时间】:2015-02-26 16:05:28
【问题描述】:
例如,当枚举是...
public enum TaskFrequency
{
Weekly,
[Display(Name = "Bi-weekly")]
Biweekly,
Monthly,
Quarterly
}
在 ViewModel 中使用,比如...
[Display(Name = "Processing frequency", Prompt = "Select frequency")]
public Enums.TaskFrequency? ProcessingFrequency { get; set; }
实现类似(在自定义编辑器 Enum.cshtml 中)...
@Html.EnumDropDownListFor(model => model,
optionLabel: ViewData.ModelMetadata.Watermark)
预期行为:
预期行为:如果值为 null(声明可为 null),则显示提示,并在列表中显示。如果不可为空(必需),则显示提示,但不包括在选择列表项中。预计在不可为空的情况下,应要求进行验证以确保没有空值返回服务器以更新模型。
请参阅此提琴手desired behaviour。实际发生的情况是 blank item in list 可以为空且未使用占位符,或者 optionLabel 变为 another list item 并且不用作任何占位符。
编辑/解决方案:
EnumDropDownListFor 帮助器似乎没有它可能的帮助。我已经确定的解决方案是使用带有第一个(基于 0)项目的枚举作为带有 [Display(Name="Select item")] 装饰器的“未选择”项目,然后根据需要在 ViewModel 类枚举类型中声明(省略类型名称上的“?”)然后将表中的数据值默认为“0”。
例如...
枚举:
public enum TaskFrequency
{
[Display(Name = "Select frequency")]
Unselected,
Weekly,
[Display(Name = "Bi-weekly")]
Biweekly,
Monthly,
Quarterly
}
ViewModel 类声明('?' 和 Prompt 已删除):
[Display(Name = "Processing frequency"]
public Enums.TaskFrequency ProcessingFrequency { get; set; }
并从自定义编辑器 Enum.cshtml 中移除 optionLabel,离开:
@Html.EnumDropDownListFor(model => model)
使用客户编辑器(上图),可以在视图中使用:
@Html.EditorFor(model => model.Frequency)
我愿意接受任何更好的想法?
【问题讨论】:
标签: c# asp.net asp.net-mvc enums html.dropdownlistfor