I二つの特性が同じではなく、あるかどうかを確認するには、次のカスタム検証属性を持つそのモデル全体に適用される:全体ではなく、ビューモデルをdecoarateしたように、私は検証属性を作成するにはどうすればよいASP MVC 5 2つのプロパティを比較するカスタム検証属性?
[AttributeUsage(AttributeTargets.Class)]
public class ValidateUser : ValidationAttribute
{
public override bool IsValid(object value)
{
UserViewModel user = value as UserViewModel;
if(user.UserId == user.ManagerId)
{
ErrorMessage = "The user and manager cannot be the same";
return false;
}
return true;
}
}
[ValidateUser]
public class UserViewModel
{
[DisplayName("Request By")]
public string UserId { get; set; }
[DisplayName("Assign To")]
public string ManagerId { get; set; }
}
検証する必要があるプロパティを飾ることができ、検証されるフィールドの近くにエラーメッセージが表示されます。以下のようなもの:
[DisplayName("Request By")]
[ValidateUser]
public string UserId { get; set; }
[DisplayName("Assign To")]
[ValidateUser]
public string ManagerId { get; set; }
あなたは、リフレクションを使用する必要があると思います。個人的に私は、DataAnnotationAttributesが単一のプロパティの範囲外に拡張されるべきではないと思います。そのようなことについて、モデル/ビューモデル上で検証ルーチンを持つことができます。しかし、それは私だけです。 – Jonesopolis
プロパティに適用された[foolproof](http://foolproof.codeplex.com/)の[NotEqualTo]検証属性の使用を検討してください。他の賢明なあなた自身を作成することができます参照してください - [ASP.NET MVC 3での検証の完全なガイド - パート2](http://www.devtrends.co.uk/blog/the-complete-guide-to-validation- in-asp.net-mvc-3-part-2)良いガイドのために –