2012-02-22 26 views
2

我怎麼能對待可空就像我在枚舉在String.cshtml文件?問題與ASP.NET MVC下拉編輯器模板爲可空的枚舉


背景: 我已經成功地實現了自定義編輯模板爲我的枚舉(視圖內實現String.cshtml /共享/ EditorTemplates/String.cshtml

我瞭解,它的工作原理作爲後備類型枚舉,所以只要你有

Html.EditorFor(m => m.PropertyOfTypeEnum) 

它創造了我正確地將一個下拉列表中,我可以選擇的選項。

問題:當我PropertyOfTypeEnum可空<>的問題就出現了。 我不明白爲什麼,它不會回落到String.cshtml,因此我無法將其視爲呈現我的下拉列表。

進一步信息:我有雙重檢查,看看它實際上不是打在我的String.cshtml我的斷點。

有沒有人有任何想法如何對待它?

回答

1

我猜測它不工作,因爲空對象將無法在調用ToString(),因此它不能推斷通過查看數據類型(這是空枚舉和not null使用String.cshtml串)。

您可以通過指定應該使用它來幫助您的編輯器模板: 在您的視圖模型中爲所需的枚舉屬性添加[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); 
} 
+0

太棒了!讓我試試看。 – hudsonmendes 2012-02-22 20:12:11

+0

輝煌!這工作得很好。不知道你可以在模型中定義模板,這非常適合它。感謝菲利普! – hudsonmendes 2012-02-22 20:40:11