MVC4格式日期不会使用DisplayFormat值进行验证

时间:2013-08-04 19:14:00

标签: .net asp.net-mvc-4 ef-code-first

我已经看到了大约1k的帖子,但我一定错过了什么。

基本上,我正在尝试在我的网站中使用dd / MM / yyyy格式,验证时会出现问题。

我是一个ViewModel:

   public class LoanBaseViewModel
    {
        public int LoanId { get; set; }

        [Required]
        [DataCompareValidation("ReturnDate", ErrorMessage = "Return date should be later than loan date")]
        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
        public DateTime LoanDate { get; set; }


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

在我的编辑模板中我已经:

@model System.Nullable<System.DateTime>
@if (Model.HasValue)
{
    @Html.TextBox("", String.Format("{0:dd/MM/yyyy}", Model.Value), new { @class = "jq-date" })
}
else
{
    @Html.TextBox("", "", new { @class = "jq-date" })
}

在页面上加载我在jq-date上附加一个Jquery DatePicker。

 $("#loanForm").find(".jq-date").datepicker({ dateFormat: 'dd/mm/yy' });

显示效果很好,但每次我尝试保存时,如果我使用dd / MM / yyyy日期,它会告诉我日期格式不正确。

知道为什么吗?

我已经尝试了一个小时而且它让我疯了!

感谢您的时间

汤姆

修改  没有更好的工作 真正奇怪的是,它确实可以在我的笔记本电脑上运行,但不能在我的桌面上,它们都是dd / MM / yyyy的显示日期,我的笔记本电脑接受25/08/2013而不是我的桌面......

修改 解决方案如下:stackoverflow.com/a/13528769/1741443。

4 个答案:

答案 0 :(得分:2)

如果没有看到你如何格式化jQuery datepicker,它有点难以肯定地回答。 jq-date的默认返回值为mm / dd / yy(所有数值数据)。

您设置的格式是与字段相关的格式;正在等待jQuery以其期望的格式传递日期的字段。字段级格式化不适用于jQuery - 这是一个单独的格式化要求。

  1. 我建议您将ApplyFormatInEditMode设置为off / false,并查看日期字段是否与datepicker一起正常工作。

  2. 如果不起作用,请根据以下内容格式化jq-date。

  3. 有关Datepicker格式选项的详细信息,请查看API documentation或转到this page

    我确定您已经在页面上引用了jQuery和Jquery UI,但是您应该为该datepicker包含以下自定义:

    <script type="text/javascript">
    $(function(){ 
    $('.datepicker').datepicker({dateFormat: 'dd-M-yy'});
     });
    </script>
    

    在上面的示例中,jQuery格式返回dd - 一个月中的两位数日,M - 月份的短名称,以及yy - 四位数年份。

    希望有所帮助。

答案 1 :(得分:1)

这可能是datepicker格式的问题。你可以在这样的初始化时设置它

 var dateTypeVar = $('#datepicker').datepicker('getDate');
 $.datepicker.formatDate('dd-mm-yy', dateTypeVar);

您还可以设置默认日期时间格式。以下是包含更多信息的链接

答案 2 :(得分:1)

假设您的服务器文化未设置为您要使用的文化格式,则需要将web.config中的全球化设置设置为您计划使用的文化。我不知道你来自哪里,但我会假设英国。所以你可以设置

 <globalization culture="en-GB"/>

这应该在<system.web>

之下

您还可以使用culture="auto",在这种情况下,将根据用户浏览器文化设置选择文化。

执行此操作并使用[DataType]属性时,您甚至不需要使用[DisplayFormat]属性。

您也可以考虑使用HtmlAttributeProvider将jq-date属性添加到日期类型中,然后根本不需要编辑器模板。参见:

http://blogs.msdn.com/b/ukadc/archive/2012/05/24/asp-net-mvc-adding-html-attributes-in-templated-helpers-editorfor.aspx

如果您的问题严格在客户端使用jquery日期控件,那么请确保您在jquery ready处理程序中初始化它(并且您不需要表单id或find,只需使用该类在jquery选择器本身)。

$(function() {
    $(".jq-date").datepicker({ dateFormat: 'dd/mm/yy' });
});

答案 3 :(得分:0)

将以下代码添加到global.asax.cs文件

  

protected void Application_BeginRequest(){

     

CultureInfo info = new   的CultureInfo(System.Threading.Thread.CurrentThread.CurrentCulture.ToString());   info.DateTimeFormat.ShortDatePattern =&#34; dd / MM / yyyy&#34 ;;   System.Threading.Thread.CurrentThread.CurrentCulture = info;

     

}

并将以下内容添加到&lt; system.web&gt;

下的 web.config

&lt; worldwide culture =&#34; en-US&#34; /&GT;