2014-05-22 67 views
1

我想在文本框內輸入日期時間作爲字符串。其實有兩個輸入字段使用註釋進行時間驗證

  • 從時間
  • 要時間

兩個應該是像00:00格式,所以我可以進入

從時間00:00 要時間23:59

如何驗證用戶輸入在asp.net mvc viewmodel使用註釋,所以我可以限制用戶最小值爲00:00,最大值爲23:59

+2

「日期」驗證來自哪裏?這聽起來像你只有一個時間價值,而不是日期。你爲什麼要防止進入午夜?這對我來說聽起來像是一個不好的驗證規則 - 如果你正在談論的事情*會在午夜開始(或結束)? –

+0

你是對的,它應該在00:00到23:59的範圍內。編輯。 – user1765862

回答

2

你可以創建一個自定義屬性,你可以用你的裝飾屬性。

namespace JensB.Tools.CustomAttributes 
{ 
    public class IsDateOk: ValidationAttribute 
    { 
     public override bool IsValid(object value) 
     { 
      if (value == null) return false; 
      if (value.GetType() != typeof(DateTime)) throw new InvalidOperationException("can only be used on DateTime properties."); 
      bool isValid = // do validation here 

      return isValid; 
     } 
    } 
} 

然後,您可以裝飾你的財產是這樣的:

[IsDateOk(ErrorMessage="Dates must be .....")] 
public property DateTime MyTime {get; set ;} 

約這樣做的好處是,你基本上不需要對前端的任何代碼,只是需要顯示@Html.ValidationMessageFor(x=> ....)到使這項工作

+2

請記住,這隻適用於「服務器端」... – ChrFin

+0

驗證完成服務器端,但錯誤顯示在客戶端。在'@Message.ValidationMessageFor(x => ....)'中將顯示'ErrorMessage ='日期必須是.....「的消息,因此最終用戶將看到該錯誤。 – JensB

+0

是的,但只有在回到服務器後,不是直接在客戶端通過JS,就像內置的驗證器一樣。 – ChrFin

0

使用正則表達式,你可以驗證你的模型,以及客戶端驗證也與這個工作就像

[RegularExpression(@"^(0[1-9]|1[0-2]):[0-5][0-9] (am|pm|AM|PM)$", ErrorMessage = "Error message")] 
public string FromTime {get;set;}