如何处理 Nullable ,就像在String.cshtml文件中使用 Enum 一样?
背景 我已成功为我的枚举实现了一个自定义编辑器模板(在Views / Shared / EditorTemplates / String.cshtml中实现了String.cshtml。
我知道它可以作为Enums的后备类型,所以每当你有
时Html.EditorFor(m => m.PropertyOfTypeEnum)
它创建了一个正确的下拉列表,我可以在其中选择选项。
问题:当我的 PropertyOfTypeEnum 是 Nullable<> 时出现问题。 我不明白为什么,它不会回到 String.cshtml ,因此我无法将其视为呈现我的下拉列表。
更多信息:我已经仔细检查过,并且它实际上没有在 String.cshtml 上点击我的断点。
有没有人知道如何对待它?
答案 0 :(得分:1)
我猜它没有用,因为在空对象上调用ToString()
会失败,因此通过查看数据类型无法推断使用 String.cshtml (这是null枚举而不是空字符串)。
您可以通过指定应使用它来帮助您的编辑器模板:
在视图模型中添加[UIHint("String")]
以获取所需的枚举属性。
替代解决方案:
我必须解决同样的问题,但使用了不同的技术。我为DropDownFor
添加了一个了解枚举的附加扩展方法。例如:
public static MvcHtmlString DropDownListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
where TProperty : struct
{
IEnumerable<SelectListItem> selectList = DropDownHelper.ToSelectListItems<TProperty>();
return htmlHelper.DropDownListFor(expression, selectList);
}