Kendo DatePickerFor Error值' 09-16-2016'对日期无效:

时间:2016-09-16 07:03:53

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

我正在使用kendo 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");
    })

我的kendo DatePickerFor位于表单中。 当我提交表格给出错误时 - &#34;价值&#39; 09-16-2016&#39;对于日期无效:。&#34; 我的本地机器日期格式为&#34; dd-MM-yyyy&#34;。 当我将此格式设置为datepicker时,表单正确提交。 但我想设置不依赖于本地机器格式的特定格式 请告诉我如何解决这个问题。

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

我有类似的问题-我发现的最佳描述(但不是解决方案)在这里: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"))

当我使用In-Line版本时,仅在kendo网格内保存更改时发生问题,并且仅用于本地机器文化,这不允许以月初格式进行保存。当我以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