我有一个Asp.Net MVC 5项目。我正在尝试利用DisplayTemplates
使我的观点更具动态性。
我正在尝试为任何DateTime
属性创建一个显示模板。但是由于某种原因,我无法设置ViewData.ModelMetadata.DisplayFormatString
属性。
这是我的视图模型的样子
public class DisplayClientViewModel : IMapFrom
{
public int Id { get; set; }
public string Name { get; set; }
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
public DateTime? EnrolledAt { get; set; }
}
这是我的DateTime.cshtml
视图
@model DateTime?
@if (!Model.HasValue && ViewData.ModelMetadata.NullDisplayText != null)
{
<span>@ViewData.ModelMetadata.NullDisplayText</span>
}
else if (Model.HasValue)
{
<span>@Model.Value.ToString(ViewData.ModelMetadata.DisplayFormatString ?? "g")</span>
}
由于我的EnrolledAt
属性装饰有[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
,因此我希望将ViewData.ModelMetadata.DisplayFormatString
设置为{0:MM/dd/yyyy}
,但是对于某些情况,它始终设置为null
原因。
如何从视图模型中设置ModelMetadata的ViewData.ModelMetadata.DisplayFormatString
属性,或访问DisplayFormat.DataFormatString
上的值?
注意:我知道我可以用[DataType(DataType.Data)]
装饰该属性,并创建一个Date.cshtml
模板来显示短日期。但是在这种情况下,我希望能够处理任何格式,而不仅仅是日期或时间。