[Range(typeof(DateTime), DateTime.MinValue.ToString(), DateTime.Today.ToString())]
45
6
日付に `[Range]`アノテーションを使うことは可能ですか?
何かのようなもの
[Range(typeof(DateTime), DateTime.MinValue.ToString(), DateTime.Today.ToString())]
6 Answer
53
私はあなたの問題を解決するためにこれをしました
パブリッククラスDateAttribute:RangeAttribute {パブリックDateAttribute():base(typeof(DateTime)、DateTime.Now.AddYears(-20).ToShortDateString()、DateTime.Now.AddYears(2).ToShortDateString()){}}
46
http://msdn.microsoft.com/ja-jp/library/system.componentmodel.dataannotations.rangeattribute.aspx[MSDNのドキュメント]にはRangeAttributeを使用できると記載されています
[範囲(typeof(DateTime)、 "1/2/2004"、 "3/4/2004"、ErrorMessage = "{0}の値は{1}と{2}の間でなければなりません")]公開日時何か{get ;セット;}
9
5
4
これは別の解決策です。
[Required(ErrorMessage = "Date Of Birth is Required")] [DataType(DataType.Date, ErrorMessage ="Invalid Date Format")] [Remote("IsValidDateOfBirth", "Validation", HttpMethod = "POST", ErrorMessage = "Please provide a valid date of birth.")] [Display(Name ="Date of Birth")] 公開日時DOB {get;セット; }
単にValidationControllerと呼ばれる新しいMVCコントローラを作成し、そこにこのコードを貼り付けます。 「リモート」アプローチのいいところは、このフレームワークを利用して、カスタムロジックに基づくあらゆる種類の検証を処理できることです。
システムを使用する。 System.Collections.Genericを使用します。 System.Diagnosticsを使用します。 System.Linqを使用します。 System.Net.Mailを使用します。 System.Webを使用する。 System.Web.Mvcを使用します。 名前空間YOURNAMESPACEHERE {パブリッククラスValidationController:Controller {[HttpPost] public JsonResult var max = DateTime.Now.AddYears(-110); var msg = string.Format( "{0:MM / dd / yyyy}から{1:MM / dd / yyyy}までの値を入力してください"、max、min); {var date = DateTime.Parse(dob);}を試してください。 if(date> min || date <max)はJson(msg)を返します。そうでなければJson(true)を返します。 catch(例外){return Json(msg);} }}}}
0
私はこのアプローチを使います:
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false)] 内部の密閉されたクラスDateRangeAttribute:ValidationAttribute {public DateTime Minimum {get; public DateTime最大値{get;} } public DateRangeAttribute(最小文字列= null、最大文字列= null、文字列フォーマット= null){format = format ?? @ "yyyy-MM-dd'T'HH:mm:ss.FFFK"; // iso8601 最小=最小== null? DateTime.MinValue:DateTime.ParseExact(最小、新規[] {フォーマット}、CultureInfo.InvariantCulture、DateTimeStyles.None); // 0 invariantculture最大=最大== null? DateTime.MaxValue:DateTime.ParseExact(最大、新しい[] {フォーマット}、CultureInfo.InvariantCulture、DateTimeStyles.None); // 0 invariantculture if(Minimum> Maximum)は、新しいInvalidOperationExceptionをスローします($ "指定された最大日付 '{最大}'は、指定された最小日付 '{最小}'"より小さい)。 // 0単なるrangevalidatorの代わりにこのカスタムバリデータを使用する唯一の理由は、range属性のように// currentcultureを使用する代わりに、invariantcultureを解析に適用したかったことです。実稼働環境で厄介なしゃっくりをかわす パブリックオーバーライドbool IsValid(オブジェクト値){if(value == null)// 0 nullはtrueを返します。 var s =文字列としての値。 if(s!= null var min =(IComparable)最小値。 var max =(IComparable)最大値。 min.CompareTo(value)<= 0を返します パブリックオーバーライド文字列FormatErrorMessage(文字列名)=> string.Format(CultureInfo.CurrentCulture、ErrorMessageString、名前、最小値、最大値); }
そしてそれをこんな風に使う
[DateRange("2004-12-01", "2004-12-2", "yyyy-M-d")] ErrorMessage = "{0}の値は{1}と{2}の間でなければなりません")]