【问题标题】:DataType annotation on a list of DateTime objects (ASP.NET MVC/Entity Framework)DateTime 对象列表上的 DataType 注释(ASP.NET MVC/Entity Framework)
【发布时间】:2012-07-05 08:47:13
【问题描述】:

有没有办法在对象列表(IEnumerable)上使用 DataType 注释,这样当我在模板中使用 DisplayFor 时,它会正确格式化日期?

型号:

public class CallOverview
{

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

}

查看:

@foreach (var day in Model.Days)
{

    <p>@Html.DisplayFor(modelItem => day)</p>

}

输出:

31/07/2012 00:00:00

【问题讨论】:

    标签: c# asp.net-mvc entity-framework


    【解决方案1】:

    我认为您看到这种行为的原因是因为您将 DataType 属性应用于枚举,而不是应用于其各个值。像这样的东西应该可以工作:

    型号:

    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; }
        }
    }
    

    查看:

    @foreach (var day in Model.Days)
    {
        <p>@Html.DisplayFor(m => day.Value)</p>    
    }
    

    【讨论】:

    • 这行得通,但有点冗长。能够做类似 [DataTypeEnumerable(DataType.Date)] 的事情会很好
    【解决方案2】:

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

    详情请看这个答案:https://stackoverflow.com/a/43773647/1742393

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

    【讨论】:

      【解决方案3】:

      答案是做不到。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-28
        • 1970-01-01
        • 1970-01-01
        • 2020-08-05
        • 1970-01-01
        • 2012-03-25
        • 2017-02-19
        相关资源
        最近更新 更多