MVC日期文化问题

时间:2015-08-24 05:21:17

标签: c# asp.net-mvc date

我在ASP.NET 4.51中使用ASP.NET MVC 5。我试图验证我的日期为dd / MM / yyyy,例如。但是模型验证会告诉我这是一个无效的日期。

根据其他SO帖子的建议:

我在web.config中有以下内容:

<system.web>
    <globalization uiCulture="en" culture="en-AU" />
</system.web>

我的视图模型如下所示:

public class PassengerItem
{
    public PassengerItem()
    {
        DateOfBirth = new DateTime(1960, 1, 1);
    }

    [Required]
    [DataType(DataType.Date)]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
    public DateTime DateOfBirth { get; set; }
}

public class BookingProcessViewModel
{
    /// <summary>
    ///     Class constructor
    /// </summary>
    public BookingProcessViewModel()
    {
        ErrorMessages = new List<string>();
        Passengers = new List<PassengerItem>();

        //Populate with 10 passengers. We show/hide these in the view. Currently we only allow a max of 4 pax to be booked at a time
        for (int i = 0; i < 4; i++)
        {
            Passengers.Add(new PassengerItem());
        }
    }

    public List<PassengerItem> Passengers { get; set; }
}

并且正在使用POST viz:

命中控制器
    [HttpPost]
    public ActionResult Process(BookingProcessViewModel aViewModel)
    {
    }

但我总是在模型状态中得到以下错误:

enter image description here

使用带有以下HTML的jQueryUI完成日期的数据输入:

<input aria-invalid="false" class="form-control hasDatepicker valid" 
data-jqui-dpicker-changemonth="True" 
data-jqui-dpicker-changeyear="True" 
data-jqui-dpicker-constraininput="True" 
data-jqui-dpicker-dateformat="dd/mm/yy" 
data-jqui-dpicker-defaultdate="01/01/1901" 
data-jqui-dpicker-maxdate="24/08/2015" 
data-jqui-type="datepicker" id="Passengers_0__DateOfBirth" 
name="Passengers[0].DateOfBirth" value="31/01/1960" type="text">

因此客户端验证正在通过,但服务器端存在问题,我无法弄明白。这让我疯了。任何人都可以放弃任何光明吗?

1 个答案:

答案 0 :(得分:1)

将您的web.config文件更改为(都必须为en-AU

globalization uiCulture="en-AU" culture="en-AU" />

DefaultModelBinder使用uiCulture的值将值转换为DateTime(在屏幕截图中注明其Culture: {en}

旁注。您有[DataType(DataType.Date)],如果您使用@Html.EditorFor(),则会生成浏览器HTML5日期选择器,这意味着您需要使用DataFormatString = "{0:yyyy-MM-dd}"才能使其正常工作。