C# DateTime对象列表上的数据类型批注(ASP.NET MVC/Entity Framework)

C# DateTime对象列表上的数据类型批注(ASP.NET MVC/Entity Framework),c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,是否有某种方法可以在对象列表(IEnumerable)上使用数据类型注释,以便在模板中使用DisplayFor时正确格式化日期 型号: public class CallOverview { [DataType(DataType.Date), DisplayFormat(DataFormatString = @"{0:dddd dd MMMM yyyy}")] public IEnumerable<DateTime> Days { get; set; } } p

是否有某种方法可以在对象列表(IEnumerable)上使用数据类型注释,以便在模板中使用DisplayFor时正确格式化日期

型号:

public class CallOverview
{

    [DataType(DataType.Date), DisplayFormat(DataFormatString = @"{0:dddd dd MMMM yyyy}")]
    public IEnumerable<DateTime> Days { get; set; }

}
public class CallOverview
{
    public IEnumerable<DateTimeWrapper> Days { get; set; }

    public class DateTimeWrapper
    {
        [DataType(DataType.Date), DisplayFormat(DataFormatString = @"{0:dddd dd MMMM yyyy}")]
        public DateTime Value { get; set; }
    }
}

我认为您看到这种行为的原因是,您正在将DataType属性应用于枚举,而不是其单个值。不过,类似的方法应该可以奏效:

型号:

public class CallOverview
{

    [DataType(DataType.Date), DisplayFormat(DataFormatString = @"{0:dddd dd MMMM yyyy}")]
    public IEnumerable<DateTime> Days { get; set; }

}
public class CallOverview
{
    public IEnumerable<DateTimeWrapper> Days { get; set; }

    public class DateTimeWrapper
    {
        [DataType(DataType.Date), DisplayFormat(DataFormatString = @"{0:dddd dd MMMM yyyy}")]
        public DateTime Value { get; set; }
    }
}
公共类调用概述
{
公共IEnumerable天{get;set;}
公共类日期时间包装器
{
[DataType(DataType.Date),DisplayFormat(DataFormatString=@“{0:dddd-dd-MMMM-yyyy}”)]
公共日期时间值{get;set;}
}
}
视图:

@foreach(Model.Days中的var日)
{
@Html.DisplayFor(m=>day.Value)

}
答案是这是不可能的。

你可以做你想做的事。您需要引入一个新类型来通过EF持久化集合

有关详细信息,请参阅此答案:

公共类调用概述
{
[DataType(DataType.Date),DisplayFormat(DataFormatString=@“{0:dddd-dd-MMMM-yyyy}”)]
公共PersistableDateTimeCollection天数{get;set;}
}

这样可以,但有点冗长。如果能够像[DataTypeEnumerable(DataType.Date)]
@foreach (var day in Model.Days)
{
    <p>@Html.DisplayFor(m => day.Value)</p>    
}
public class CallOverview
{

    [DataType(DataType.Date), DisplayFormat(DataFormatString = @"{0:dddd dd MMMM yyyy}")]
    public PersistableDateTimeCollection<DateTime> Days { get; set; }

}