0

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; } 
+0

あなたは、リフレクションを使用する必要があると思います。個人的に私は、DataAnnotationAttributesが単一のプロパティの範囲外に拡張されるべきではないと思います。そのようなことについて、モデル/ビューモデル上で検証ルーチンを持つことができます。しかし、それは私だけです。 – Jonesopolis

+0

プロパティに適用された[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)良いガイドのために –

答えて

-1

プロパティ値を検証するための別の可能な方法がありRemote属性あなたのコントローラで

モデルクラスで

[DisplayName("Request By")] 
public string UserId { get; set; } 


[DisplayName("Assign To")] 
[Remote("Validate","Home", HttpMethod="Post", AdditionalFields="UserId", ErrorMessage = "Should not be same")] 
     public string ManagerId { get; set; } 

を使用することです

[HttpPost] 
public ActionResult Validate(string ManagerId , string UserId) 
{ 
    // put some validation involving ManagerId and UserId here 
    return Json(true); 
} 

Working Demo is here

+1

なぜ投票していますか...それは働いています... – mmushtaq

+0

*** [こちらはデモの作業です](https://dotnetfiddle.net/59L3Ca)*** – mmushtaq

関連する問題