2013-02-23 33 views
1

我的模型擁有兩個日期屬性。 ,我想限制他們的日期範圍,所以我放置一個數據註釋屬性來驗證它。範圍驗證屬性爲有效日期返回虛假警報

 [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

在什麼格式的你提供日期 - 不變或者你所在國家的? – 2013-02-23 15:34:00

+0

@SławomirRosiek格式是DD/MM/YYY,我使用jQuery日期選擇器來選擇和格式化它。 – Mortalus 2013-02-23 17:56:06

回答

4

ASP.NET MVC和jQuery Validate預期的默認日期格式是MM/DD/YYYY。如果你想使用特定的文化形式:

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

    <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. 看也how to setup format jQuery的日期選取器

+1

我有兩種文化的雙語言支持我如何根據當前的線程文化使動態解決方案處於動態狀態? – Mortalus 2013-02-24 03:17:37

+0

忽略第一步,並在第二步只是從CultureInfo.CurrentCulture.Name – 2013-02-24 08:54:13

+0

獲取文化代碼對不起,但它不明白全球化插件與驗證格式有什麼關係..是唯一的方式告訴jQuery驗證程序,我使用不同的格式?並關於sstep 3我已經使用datepicker的格式將其設置爲DD/MM/YYY – Mortalus 2013-02-24 08:58:58