【问题标题】:Kendo DatePickerFor Error The value '09-16-2016' is not valid for Date:Kendo DatePickerFor 错误值“09-16-2016”对于日期无效:
【发布时间】:2016-09-16 07:03:53
【问题描述】:

我正在使用剑道 datePickerFor 代码到模型中=====

[DataType(DataType.Date)]
    [Display(Name = "Date:")]
    [DisplayFormat(DataFormatString = "{0:MM-dd-yyyy}",
           ApplyFormatInEditMode = true)]

    public DateTime TransactionDate { set; get; }

进入查看页面====

 @(Html.Kendo().DatePickerFor(m => m.TransactionDate)
                .Format("MM-dd-yyyy")
                .ParseFormats(new List<string>()
                              {
                                "MM-dd-yyyy"
                              })
                )

也使用 javascript====

$(function () {
         kendo.culture("en-US");
    })

我的剑道 DatePickerFor 在一个表单中。 当我提交表单时出现错误 - “值 '09-16-2016' 对日期无效:。” 我的本地机器日期格式是“dd-MM-yyyy”。 当我将此格式设置为 datepicker 时,表单提交正确。 但我想设置不依赖于本地机器格式的特定格式 请告诉我如何解决这个问题。

【问题讨论】:

  • 您在客户端或发布到服务器后收到验证错误?

标签: c# model-view-controller kendo-ui datepicker


【解决方案1】:

通常,您会希望在客户端和服务器上匹配文化:

http://docs.telerik.com/kendo-ui/aspnet-mvc/globalization#match-cultures

可以设置服务器端文化,具体取决于浏览器请求中提供的区域信息。

https://developer.mozilla.org/en-US/docs/Web/HTTP/Content_negotiation

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language

如果有正当理由不这样做,那么您将不得不手动处理以服务器期望的正确格式提交日期值。

【讨论】:

  • 感谢...您的反馈
【解决方案2】:

我遇到了类似的问题 - 我找到的最佳描述(但不是解决方案)在这里:https://blog.gerardbeckerleg.com/posts/kendo-ui-mvc-grid-datepicker-in-line-and-in-cell-edit-validation-error-the-value-is-not-valid/

我的本​​地机器文化日期格式是 dd.MM.yyyy,在我的多语言应用程序中,我想始终强制使用一种日期格式:yyyy-MM-dd,所以我添加了(从不显示本地日期格式)

@(Html.Kendo().DatePickerFor(m => m.TransactionDate)
                .Format("yyyy-MM-dd"))

当我使用内联版时,仅在剑道网格内保存更改时出现问题,并且仅适用于我的本地机器文化,这不允许使用月份优先的格式。当我以 yyyy-MM-dd 格式输入日期时,在接受此更改后,它以某种方式交换了月份和日期,并且我的日期 2020-01-05-(1 月 5 日)保存为 2020-05-01(5 月 1 日)。当一天 > 12 发生与您相同的错误时(例如,对于日期 2020-12-31 - 12 月 31 日,它不能每月更改 31 个信息,我收到错误:“值 31.12.2020 对日期无效" 在错误消息中,给定的格式与我的本地机器文化 (dd.MM.yyyy -> 31.12.2020) 完全相同,但发生错误,因此日期被视为 MM.dd.yyyy,并且这种格式 31.12.2020 确实无效.

奇怪的是,当我从客户端计算机(但与我的本地文化相同)运行相同的应用程序以及在本地计算机上在 VS 中调试时(在本地计算机上我无法重现错误,只有在客户端机器上)

我做了什么?

  1. 我检查了我是否加载了正确的剑道文化(我做了):kendo.culture("pl-PL");
  2. 我更改了 kendo.culture.pl-PL.min.js 日期格式信息 yyyy-MM-dd。为了不更改 min.js 文件,我将其作为扩展 js 方法(注意第一个 true 参数!):

var customCulture = $.extend(true, kendo.culture(), {
            calendars: {
                standard: {
                    patterns: {
                        d: "yyyy-MM-dd",
                        g: "yyyy-MM-dd HH:mm",
                        G: "yyyy-MM-dd HH:mm:ss"
                    }
                }
            }
        }
        );
它强制采用给定的日期格式并将它们推送(合并)到当前加载的 kendo.culture() 中,这有什么用。因为我总是想显示 yyyy-MM-dd 格式,所以我就是我需要的。

解决的思路取自这里:https://www.telerik.com/forums/calendar-customization-764d6343160b

【讨论】:

    猜你喜欢
    • 2017-07-16
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    相关资源
    最近更新 更多