【发布时间】:2014-09-17 04:00:45
【问题描述】:
我正在创建一个 HtmlHelper 扩展,目的是获取一个 DateTime(可能为空也可能不为空)并将其传递到允许分别编辑日期和时间的编辑器模板中。例如:
HtmlHelper:
public static IHtmlString DateTimeFor_DateAndTime<TModel>(this HtmlHelper<TModel> htmlHelper,Expression<Func<TModel, DateTime?>> expression,string htmlFieldName = null,object additionalViewData = null)
{
return htmlHelper.EditorFor(expression,
"DateTime_DateAndTime",
htmlFieldName,
additionalViewData);
}
在视图中:
@Html.DateTimeFor_DateAndTime(m => m.StartDate)
问题在于,当 StartDate 不是可为空的日期时间时,传递给扩展的表达式是 m => Convert(m.StartDate),随后在传递到底层 EditorFor 调用时会引发错误。但是,如果我直接在页面中调用 EditorFor,则处理可为空的日期时间没有问题。
如果我创建相同的扩展方法,但其表达式返回 DateTime 而不是 DateTime?,一切正常。
什么是添加 Convert() 调用,如何防止它?
【问题讨论】:
-
表达式是否必须表示日期时间?或日期时间明确?你能说 Expression
> 吗? -
它仍然被包裹在 Convert() 中传递。
标签: asp.net-mvc mvc-editor-templates