3

I've saw about 1k posts on this, but I must have missed something.

Basically, I am trying to use dd/MM/yyyy format in my site, problem occurs at validation.

I've a 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; }
}

In my EditorTemplate I've This:

@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" })
}

On page Load I attach a Jquery DatePicker on the jq-date.

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

Display works fine, but every time i tried to save, it tells me date is not in correct format if I use a dd/MM/yyyy date.

Any idea why?

I've been trying for like one hour and it's driving me insane!

Thanks for your time

Tom

Edit: didn't work better What is really weird is that it does work on my laptop, but not in my desktop both of them are display date in dd/MM/yyyy, my laptop accepts 25/08/2013 but not my desktop...

Edit: Solution is here: stackoverflow.com/a/13528769/1741443.

4

4 回答 4

2

如果没有看到您如何格式化 jQuery 日期选择器,它有点难以明确回答。jq-date 的默认返回是 mm/dd/yy(所有数字数据)。

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

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

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

有关 Datepicker 格式化选项的更多信息,请查看API 文档或转到此页面

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

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

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

希望有帮助。

于 2013-08-04T20:09:31.307 回答
2

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

 <globalization culture="en-GB"/>

这应该在<system.web>

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

这样做并使用该[DataType]属性时,您甚至不需要使用该[DisplayFormat]属性。

您可能还考虑使用HtmlAttributeProviderjq-date 属性添加到您的日期类型,那么您的需要根本不需要编辑器模板。看:

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

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

$(function() {
    $(".jq-date").datepicker({ dateFormat: 'dd/mm/yy' });
});
于 2013-08-04T21:00:12.030 回答
1

这可能是日期选择器格式的问题。您可以像这样在初始化期间设置它

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

您还可以设置默认日期时间格式。这里有更多信息的链接

于 2013-08-04T20:12:53.427 回答
0

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

受保护的无效Application_BeginRequest(){

CultureInfo 信息 = 新 CultureInfo(System.Threading.Thread.CurrentThread.CurrentCulture.ToString()); info.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy"; System.Threading.Thread.CurrentThread.CurrentCulture = 信息;

}

并将以下内容添加到<system.web> 下的web.config

<全球化文化="zh-CN" />

于 2014-10-21T13:36:14.473 回答