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

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

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

我得到了错误:

模板只能与字段访问、属性访问、一维数组索引或单参数自定义索引器表达式一起使用。

有谁知道如何解决这个问题?谢谢

4

3 回答 3

2

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

@Html.TextBoxFor(x => x.ActiveDevice.LastUseDate, new { @readonly = "readonly", @Value = Model.ActiveDevice.LastUseDate.ToShortTimeString() })
于 2013-07-30T11:47:44.917 回答
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" })
于 2013-07-30T11:49:04.813 回答
0

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

@Html.TextBox("LastUseDate", Model.ActiveDevice.LastUseDate.ToShortDateString(), new { @readonly = "readonly" })
于 2013-07-30T12:52:16.500 回答