控制器未收到英国格式的MVC3日期

时间:2013-02-28 23:08:54

标签: c# ajax asp.net-mvc datetime

鉴于此VM

public class ApplicationDTO : BaseDTO
{
    public DateTime Date { get; set; }
    public int JobId {get;set;}
    public int Status {get;set;}
    [Required]
    public string Message { get; set; }
    public string ExpertCode { get; set; }
}

因此我有一个隐藏的领域

@Html.Hidden("Date", DateTime.Now)

哪个小提琴手告诉我的是按照我的预期发送到服务器(英国格式,我在英国!)

enter image description here

但在控制器上,日期显示为默认分钟。日期

enter image description here

这只是英国格式吗?如果是这样,我最好的方式是什么呢?虽然目前我将其设置为当前日期,但可能会将其设置为任何给定日期,即

@Html.HiddenFor(x => x.Date)

我正在使用AJAX提交表单,如果这有所不同。

4 个答案:

答案 0 :(得分:5)

如果是Get MVC在模型绑定期间默认使用文化不变格式(基本上是美国格式)。所以它不接受英国日期格式。我相信设计的原因是可以传递一个查询字符串因此它需要文化不变(我不是100%相信这个逻辑)。

本文介绍了可能的解决方案http://xhalent.wordpress.com/2011/05/14/localization-of-dates-in-asp-net-mvc/

我们只是确保我们永远不会使用英国日期格式

此问题还涉及问题Globalization problem with DateTime and ASP.NET MVC 3 Model Binding

答案 1 :(得分:1)

您应该使用数据注释来格式化模型或视图模型上的日期

public class ApplicationDTO : BaseDTO
{
   [DisplayFormat(DataFormatString="{0:dd/MM/yyyy}", ApplyFormatInEditMode=true)]
   public DateTime Date { get; set; }
   public int JobId {get;set;}
   public int Status {get;set;}
   [Required]
   public string Message { get; set; }
   public string ExpertCode { get; set; }
}

根据您的申请格式。 正如我所见,你没有为你的财产提供任何格式

答案 2 :(得分:0)

我遇到了与dd.MM.yyyy格式类似的问题,并且必须将web.config中的globalization元素设置为适当的culture和uiCulture属性设置。

答案 3 :(得分:0)

如果使用@ Html.Hidden(不是For helper),它将无法将请求中的参数与模型中的属性匹配。

如果您使用@ Html.HiddenFor(x => x.Date,“28/2/2013”​​),您将看到正确填充的日期。

您还可以验证Request.Params集合。在Action中加入一个断点。你会看到其中一个Params有你的约会...... JQuery不会以任何方式影响它。