c# – 访问DisplayTemplate中的模型属性
发布时间:2020-12-15 22:22:44 所属栏目:百科 来源:网络整理
导读:我想为DateTime属性创建一个DisplayTemplate. 例如,我有以下模型: public class MyModel{ [DataType(DataType.Date)] public DateTime? Date { get; set; } [DataType(DataType.Time)] public DateTime? TimeFrom { get; set; } [DataType(DataType.Time)]
我想为DateTime属性创建一个DisplayTemplate.
例如,我有以下模型: public class MyModel { [DataType(DataType.Date)] public DateTime? Date { get; set; } [DataType(DataType.Time)] public DateTime? TimeFrom { get; set; } [DataType(DataType.Time)] public DateTime? TimeUntil { get; set; } [DataType(DataType.DateTime)] public DateTime? SomeDate { get; set; } } 在我看来: @Html.DisplayFor(x => x.Date) // Expected output: 13.11.2015 @Html.DisplayFor(x => x.TimeFrom) // Expected output: 08:00 @Html.DisplayFor(x => x.TimeUntil) // Expected output: 12:00 @Html.DisplayFor(x => x.SomeDate) // Expected output: 15.11.2015 08:55 在我的DisplayTemplate中,我有以下代码: @using System.ComponentModel.DataAnnotations @using System.Reflection @model DateTime? @{ var type = Model.GetType(); var attribute = type.GetCustomAttribute(typeof (DataTypeAttribute)) as DataTypeAttribute; } @if (Model != null) { if (attribute != null) { if (attribute.DataType == DataType.Date) { @Model.Value.ToShortDateString() } if (attribute.DataType == DataType.Time) { @Model.Value.ToShortTimeString() } else { @Model.Value } } else { @Model.Value } } 不幸的是,找不到DataTypeAttribute. 在模型中,我们总是有DateTimes的DataType属性. 解决方法
请注意,您正在搜索分配给DateTime的属性?键入本身,而不是MyModel类的属性.没有在这些中找不到这个数据模型属性.
所有内置数据模型属性都填充了ViewData.ModelMetadata对象,因此您应该能够使用以下方法访问数据类型的名称: ViewData.ModelMetadata.DataTypeName 不幸的是,由于某种原因,这是一个字符串,所以你可能需要将它与DataType.Date.ToString()之类的东西进行比较. 有关其他模型元数据属性的更多信息,请参见ModelMetadata class description. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |