首页 > 解决方案 > 如何在 razor-engine 中的 ModelMetadata 对象上设置 DisplayFormatString 属性?

问题描述

我有一个 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

如何ViewData.ModelMetadata.DisplayFormatString从视图模型中设置 ModelMetadata 上的属性,或访问 on 上的值DisplayFormat.DataFormatString

注意:我知道我可以用它来装饰属性[DataType(DataType.Data)]并创建一个Date.cshtml仅显示短日期的模板。但在这种情况下,我希望能够处理任何格式,而不仅仅是日期或时间。

标签: asp.net-mvcrazorasp.net-mvc-5razorenginedisplay-templates

解决方案


推荐阅读