在Razor视图中仅显示日期

时间:2012-02-23 10:51:55

标签: asp.net-mvc-3 datetime

在我的模型中,我有机会:

public DateTime CreatedFrom { get; set; }

在强类型视图中,我要显示该日期并使其可编辑(但仅限日期,而不是时间)。 我用:

@Html.EditorFor(m=>m.CreatedFrom.ToShortDateString())

当我想去那个视图时发生异常:

Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions.

如何正确?

3 个答案:

答案 0 :(得分:1)

请注意,定义是

Html.EditorFor<T1, T2>(Expression<T1, T2> x)

Html.EditorFor<T1, T2>(Func<T1, T2> f)

因此剃刀引擎只查找字段名称CreatedFrom,但无法处理方法调用。 可能你需要额外的j来帮助来回转换。

答案 1 :(得分:1)

kamil,你不能将你的模型绑定到属性方法,你只能将它绑定到:

@Html.EditorFor(m=>m.CreatedFrom)

我强烈建议你在控制器(或服务类)中解决日期时间问题,作为填充视图的初始HttpGet操作的一部分,或者当你发回值时在HttpPost内部(不太理想)一个场景)。无论哪种方式,都必须在控制器级别采取补救措施。

答案 2 :(得分:1)

Linquinze是对的,EditorFor用于表达而不是Func。

如果您尝试显示日期的文本框,可以使用:

@Html.TextBox("CreatedFrom", @Model.CreatedFrom.ToShortDateString())

我相信它会实现同样的目标。