当我使用.ToShortTimeString()....模板只能使用?

时间:2013-07-30 11:43:02

标签: c# asp.net-mvc

@Html.TextBoxFor(x => x.ActiveDevice.LastUseDate, new { @readonly = "readonly" })

将我的日期文本框显示为只读,这很好,但它显示日期和时间。我只想要日期,所以iv使用.ToShortTimeString()with:

 @Html.TextBoxFor(x => x.ActiveDevice.LastUseDate.ToShortTimeString(), new { @readonly = "readonly" })

我收到错误:

  

模板只能用于字段访问,属性访问,单维数组索引或单参数自定义索引器表达式。

任何人都知道如何解决这个问题? 感谢

3 个答案:

答案 0 :(得分:2)

您可以使用HtmlAttributes插入格式化日期:

@Html.TextBoxFor(x => x.ActiveDevice.LastUseDate, new { @readonly = "readonly", @Value = Model.ActiveDevice.LastUseDate.ToShortTimeString() })

答案 1 :(得分:2)

这是因为TextBoxFor(以及其他模板扩展)需要一个引用模型属性的表达式,因此模型绑定器可以序列化数据:

  

需要验证表达式是否有效;它需要至少结束   我们可以转换为模型的有意义字符串的东西   约束目的

(查看ModelMetadata.FromLambdaExpression

中的相关代码

有几种方法可以解决这个问题,一种方法是在模型中添加DisplayFormat属性:

[DataType(DataType.Date)]  //try this as well? maybe Orchard intervenes into rendering...
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
public DateTime LastUseDate { get; set; }

然后像往常一样使用该属性是视图:

@Html.TextBoxFor(x => x.ActiveDevice.LastUseDate, new { @readonly = "readonly" })

答案 2 :(得分:0)

感谢andreister的帮助,我能够解决问题。将其更改为“textBox”,删除lamba,广告在引号中添加文本框的名称:

@Html.TextBox("LastUseDate", Model.ActiveDevice.LastUseDate.ToShortDateString(), new { @readonly = "readonly" })