2012-02-23 87 views
2

在我的模型显示仅日期我有属性格式:在Razor视图

public DateTime CreatedFrom { get; set; } 

在强类型的视图我怎么显示日期和使其可编辑(但只有日期,没有时间)。 我使用:

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

当我想要去那个观点例外occures:

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

怎么做是正确的?

回答

1

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

如果你想显示一个文本框,虽然你的日期,你可以使用:

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

,我相信会取得同样的事情。

1

注意定义

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

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

所以剃刀引擎只查找字段名CreatedFrom,但无法处理方法调用。 也许你需要额外的js来帮助来回转换。

1

卡米尔,你不能绑定模型的属性方法,你只能将其绑定到:

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

我会强烈建议你整理一下你的控制器内的日期时间问题(或服务类),或者作为初始HttpGet动作的一部分来填充视图,或者在您将值发回时(不太理想的场景)在HttpPost内部。无论哪种方式,补救措施都必须在控制器级别进行。