可为Nullable Enums的ASP.NET MVC下拉列表编辑器模板的问题

时间:2012-02-22 11:38:56

标签: asp.net-mvc scaffolding

如何处理 Nullable ,就像在String.cshtml文件中使用 Enum 一样?


背景 我已成功为我的枚举实现了一个自定义编辑器模板(在Views / Shared / EditorTemplates / String.cshtml中实现了String.cshtml。

我知道它可以作为Enums的后备类型,所以每当你有

Html.EditorFor(m => m.PropertyOfTypeEnum)

它创建了一个正确的下拉列表,我可以在其中选择选项。

问题:当我的 PropertyOfTypeEnum Nullable<> 时出现问题。 我不明白为什么,它不会回到 String.cshtml ,因此我无法将其视为呈现我的下拉列表。

更多信息:我已经仔细检查过,并且它实际上没有在 String.cshtml 上点击我的断点。

有没有人知道如何对待它?

1 个答案:

答案 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);
}