【问题标题】:MVC Kendo grid date validations giving error?MVC Kendo 网格日期验证给出错误?
【发布时间】:2016-07-18 22:25:07
【问题描述】:

DateTime 字段必须是日期。

我在 MVC 项目中使用剑道网格。我有同一个应用程序的法语和英语版本。以下是我在 _Layout.cshtml 文件中所做的:

<script>
    if ("@Session["Culture"]" === "en-CA") {
        kendo.culture("en-US");
        Globalize.culture('en-CA');
    } else {
        kendo.culture("fr-CA");
        Globalize.culture('fr-CA');
    }

    $.validator.methods.number = function (value, element) {
        return this.optional(element) || !isNaN(Globalize.parseFloat(value));
    }

    $.validator.methods.date = function (value, element) {          
        if (this.optional(element))
            return true;

        var result = Globalize.parseDate(value, "@LCL.Common_Formats.DatePickerFormat", "@Session["Culture"]");

        return !isNaN(result) && (result != null);
    }


    $.validator.methods.min = function (value, element, param) {
        return this.optional(element) || Globalize.parseFloat(value) >= param;
    }

    $.validator.methods.max = function (value, element, param) {
        return this.optional(element) || Globalize.parseFloat(value) <= param;
    }

    $.validator.methods.range = function (value, element, param) {
        if (this.optional(element))
            return true;
        var result = Globalize.parseFloat(value);
        return (result >= param[0] && result <= param[1]);
    }
</script>

在网格中我有一个如下的日期选择器:

 c.Bound(u => u.DateTime)
                    .Title(LCL.Common_Labels.PurchaseDate)
                    .Format("{0:" + LCL.Common_Formats.DatePickerFormat + "}")                    
                    .Width(smlColumn);

LCL.Common_Formats.DatePickerFormat 是资源文件中用于存储日期选择器格式的条目。我有英文和法文资源文件。我的问题是我遇到了这个奇怪的异常: 日期时间字段必须是日期 在法语版本中编辑记录时。

但是在英文版中效果很好……

【问题讨论】:

  • 如果您将日期写为 07/18/2016 是否会出错
  • 是的...我在输入 07/18/2016 时遇到同样的错误
  • 你检查了这个答案stackoverflow.com/a/28605954/3254920
  • 会尽力让你知道..
  • 它对我不起作用。你将如何以剃刀语法在剑道网格中使用它?

标签: jquery asp.net-mvc kendo-ui


【解决方案1】:

那些日期格式...

我在格式方面遇到了类似的问题。我可以建议你:

获取带有配置的剑道验证器实例:

var kendoValudator = $('#yourFormId').kendoValidator({
    rules: {
        mvcdate: function (e) {
            if (e.is('[data-role="datepicker"]')) {
                var result = kendo.parseDate($(e).val(), 'dd/MM/yyyy');
                return !!result;
            }

            return true;
     }
}).data('kendoValidator');

另外,如果您在页面上使用 jQuery,请尝试添加:

jQuery.extend(jQuery.validator.methods, {
    date: function (value, element) {
        if ($(element).is('[data-role="datepicker"]')) {
            var res = this.optional(element) || kendo.parseDate(value, "dd/MM/yyyy") != null;
            return !!res;
        }

        return true;
    }
});

如果您的服务器收到默认日期 (01/01/0001),您应该更改服务器文化。

例子:

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB");

希望对你有帮助。

【讨论】:

    【解决方案2】:

    我找到了最好的解决方案:

    var culture = kendo.culture();
    if (culture.name === "fr-CA")
    {
        culture.calendar.patterns.F = "dd/MM/yyyy";
    }
    else
    {
        culture.calendar.patterns.F = "MM/dd/yyyy";
    }
    

    这必须添加到document.ready() 部分。

    我花了 3 天的时间来寻找解决方案...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多