2011-08-17 5 views
0

このクラスはDateTimeViewModelNullableと呼ばれ、DateTimeを返すメソッドがありますか?2つのdatetimeプロパティのうちの1つがasp.netの別のものより大きいかどうかをテストするカスタムバリデータを実行する方法mvc3

public DateTime? GetDateTime 
     { 
      get 
      { 
       DateTime date; 
       if (DateTime.TryParse(Date, CultureInfo.CurrentCulture, DateTimeStyles.None, out date)) 
       { 
        try 
        { 
         return new DateTime(date.Year, date.Month, date.Day, ParseInt(Hour), ParseInt(Minute), 0, DateTimeKind.Utc); 
        } 
        catch (ArgumentException) 
        { 
         return null; 
        } 
       } 
       return null; 
      } 
     } 

Iはその後のviewmodel 公共DateTimeViewModelNullable DateOut {取得にそのタイプの2つの特性を有します。セット;私はエラーエラーにオブジェクトを取得STARTDATEが終了日よりも大きければ、私はのCustomValidatorを作成したので、確実に(そしてユーザーのために印刷)する必要がありますが、

public class CustomIsValidDate : ValidationAttribute 
{ 
    public DateTime? StartDate { get; set; } 
    public DateTime? EndDate { get; set; } 


    public CustomIsValidDate(DateTime? startDate, DateTime? endDate) 
    { 
     StartDate = startDate; 
     EndDate = endDate; 
    } 

    public override bool IsValid(object value) 
    { 
     if (StartDate == null || EndDate == null) 
      return true; 
     if (EndDate > StartDate) 
      return true; 

     return false; 
    } 
} 

をいけない仕事}

[CustomIsValidDate(DateOut.GetDateTime,DateIn.GetDateTime,ErrorMessage = "Returning date must be higher than ingoing date!")] 
    public DateTimeViewModelNullable DateIn { get; set; } 

非静的フィールド、メソッド、またはプロパティに参照が必要です

答えて

0

GetDateTimeメソッドで静的変数を使用している場合は、それを削除する必要があります。

+1

私はかなり従いません。あなたは何を意味するのか? – Mech0z

0

ただ2つのdatetimeを使用しますか?あなたのモデルのプロパティを実装し、以下のようにこのモデルでSystem.ComponentModel.DataAnnotations.IValidatableObjectを実装してください。

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
    { 
     var validations = new List<ValidationResult>(); 

     if (From.HasValue && Until.HasValue) 
     { 
      if (From.Value.Date < Until.Value.Date) 
       validations.Add(new ValidationResult("StartDateMustBeBeforeEndDate")); 
      else if (From.Value.Date == From.Value.Date 
         && From.Value.Hour < Until.Value.Hour) 
       validations.Add(new ValidationResult("StartHourMustBeBeforeEndHour")); 
      else if (From.Value.Date == From.Value.Date 
         && From.Value.Hour == Until.Value.Hour 
         && From.Value.Minute < Until.Value.Minute) 
       validations.Add(new ValidationResult("StartMinuteMustBeBeforeEndMinute")); 
     } 

     return validations; 
    } 
+0

DateTimeViewModelNullableを使用しないようにしたいですか? Date、Hour、Miniuteの各テキストフィールドを個別に検証する方法はわかりません。 – Mech0z

+0

私はいくつかのルールを追加しました。そこでは、From DateがEnddateよりも大きくなければならないという事実をチェックすることができます。また、日付が同じである場合、from時間はendourの前でなければならず、これがあなたに役立つことを願っています –

関連する問題