2013-08-28 35 views
3

是否有任何方法使用@Range驗證Regula中的日期範圍? (同上@Min和@Max)使用Regula驗證日期範圍

或者我需要使用@Custom?

@Range(min= 

@Range(max= 

似乎並不接受Date類型的東西 - 只有數字或字符串。

回答

1

不幸的是@Range只接受數字。我想你可以做這樣的事情,雖然:

<input type="hidden" 
     name="date" 
     id="date" 
     data-constraints=" 
      @Future(date='2000/1/1', format='YMD') 
      @Past(date='2010/1/1', format='YMD')" 
/> 

這將確保日期爲2000/1/12010/1/1之前(即,在兩者之間)。我沒有記錄date參數,因爲我認爲在編寫文檔時我沒有實現它。抱歉;該文檔有點落後,因爲我正在開發Regula的1.3版本,這將有更多的好東西。我將很快開始更新文檔!

+0

謝謝!文件很好,新的訴訟聲音聽起來不錯!對於記錄來說,使用字符串似乎可行 - 但由於我使用的是Unix時間戳,所以沒有理由認爲它不是整數值。 – sq33G

+0

如果你使用紀元時間,'@ Range'應該可以工作。奇怪它並不是它可能是某種錯誤。如果可以,請提交錯誤報告。 –

+0

時間問題在我的答案中描述的JavaScript Date.getTime和.NET方法之間。 Regula的作品非常漂亮。 – sq33G

0

我發現下面的技巧的工作原理:

我補充說,包含的Date.getTime()格式輸入的日期第二,隱藏輸入:

<input type="hidden" data-bind="value: myDateValue.getTime()" ... /> 

(我使用的劍道MVVM,但我敢肯定,其他MVVM庫可以處理我的情況下同樣的方法)

然後爲約束,在服務器端(ASP.NET MVC)我生成了Unix時間的最小值和最大值:

@Range(min="<%= (dateTime1 - new DateTime(1970, 1, 1).ToLocalTime()).TotalSeconds %>", 
     max="<%= (dateTime2 - new DateTime(1970, 1, 1).ToLocalTime()).TotalSeconds %>") 

編輯

需要使用.TotalMilliseconds - 甚至因此有一些無法解釋的矛盾。