范围验证属性返回有效日期的虚假警报

时间:2013-02-23 06:05:15

标签: asp.net-mvc validation data-annotations date-range

我的模型包含两个日期属性。 我想限制他们的日期范围,所以我放置一个数据注释属性来验证它。

        [Display(ResourceType = typeof(FaultManagementStrings), Name = "FaultOpenDate")]
        [DataType(DataType.DateTime)]
        [Range(typeof(DateTime), "1900-01-01", "2500-01-01", ErrorMessage = "Invalid Date")]
        public DateTime FaultOpenDateTime { get; set; }

        [Display(ResourceType = typeof(FaultManagementStrings), Name = "FaultCloseDate")]
        [DataType(DataType.DateTime)]
        [Range(typeof(DateTime), "1900-01-01", "2500-01-01", ErrorMessage = "Invalid Date")]
        public DateTime FaultCloseDateTime { get; set; }

但客户端验证对任何有效日期显示无效... 我在这做错了什么?

1 个答案:

答案 0 :(得分:4)

ASP.NET MVC和jQuery Validate期望的默认日期格式为MM / DD / YYYY。如果您想使用特定文化的格式:

  1. 在web.config中添加到您的<system.web以下部分:

    <globalization uiCulture="pl-PL" culture="pl-PL"/>

    这将设置您的Web应用程序的服务器端文化

  2. 使用jQuery Globalize插件在客户端支持该文化,并覆盖期望MM / DD / YYYY格式的日期的默认验证器。您还应该覆盖范围验证器。

    Globalize.culture('pl-PL');
    jQuery.validator.methods['date'] = function (value, element) {
        return this.optional(element) || Globalize.parseDate(value);
    };
    jQuery.validator.methods['range'] = function (value, element, param) {
        var parsedValue = Globalize.parseDate(value) || Globalize.parseFloat(value),
            parsedParam1 = Globalize.parseDate(param[0]) || Globalize.parseFloat(param[0]),
            parsedParam2 = Globalize.parseDate(param[1]) || Globalize.parseFloat(param[1]);
        return this.optional(element) || (parsedValue >= parsedParam1 && parsedValue <= parsedParam2);
    };
    
  3. 在jQuery日期选择器中查看how to setup format