如何在剃刀引擎中的ModelMetadata对象上设置DisplayFormatString属性?

时间:2018-08-08 17:11:00

标签: asp.net-mvc razor asp.net-mvc-5 razorengine display-templates

我有一个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模板来显示短日期。但是在这种情况下,我希望能够处理任何格式,而不仅仅是日期或时间。

0 个答案:

没有答案