を比較します。私は[Compare("startDate")]
を使用しようとしましたが、これは同等の操作でのみ機能します。mvc4データアノテーションは、私は私のモデルでは、これらの二つのフィールドを持つ2つの日付
「より大きい」操作にはどうすればよいですか?
を比較します。私は[Compare("startDate")]
を使用しようとしましたが、これは同等の操作でのみ機能します。mvc4データアノテーションは、私は私のモデルでは、これらの二つのフィールドを持つ2つの日付
「より大きい」操作にはどうすればよいですか?
Fluent ValidationまたはMVC Foolproof Validationをご覧ください:多くのことが役に立ちます。
たとえば、日付プロパティで使用できるアノテーションよりも[GreaterThan("StartDate")]
注釈があります。
それとも、他のライブラリを使用したくない場合は、あなたがあなたのモデルにIValidatableObject
を実装することで、独自のカスタム検証を実装できます。
public class ViewModel: IValidatableObject
{
[Required]
public DateTime StartDate { get; set; }
[Required]
public DateTime EndDate { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (EndDate < StartDate)
{
yield return
new ValidationResult(errorMessage: "EndDate must be greater than StartDate",
memberNames: new[] { "EndDate" });
}
}
}
IValidatableObjectインタフェースが実装検証するオブジェクトのための方法を提供しますIValidatableObject.Validate(ValidationContext validationContext)メソッドです。このメソッドは常にIEnumerableオブジェクトを返します。そのため、ValidationResultオブジェクトのリストを作成し、これにエラーを追加して戻す必要があります。空リストは、あなたの条件を検証することを意味します。これはmvc 4で次のようになります...
public class LibProject : IValidatableObject
{
[Required(ErrorMessage="Project name required")]
public string Project_name { get; set; }
[Required(ErrorMessage = "Job no required")]
public string Job_no { get; set; }
public string Client { get; set; }
[DataType(DataType.Date,ErrorMessage="Invalid Date")]
public DateTime ExpireDate { get; set; }
IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
{
List <ValidationResult> res =new List<ValidationResult>();
if (ExpireDate < DateTime.Today)
{
ValidationResult mss=new ValidationResult("Expire date must be greater than or equal to Today");
res.Add(mss);
}
return res;
}
}
このソリューションは、比較するケースが複数ある場合に備えて、検証結果の一覧が必要なため、選択した回答より優れています。ありがとう。 –
これはクライアント側(JS)では正しく動作しません。送信時にのみこのメッセージが表示されますか? – Davor
@Davorこれはクライアント側でも機能します。 –
戻り値の型はIEnumerableであるため、yield returns new ValidationResult ...を実行するとより良い結果が得られます。 :) –