2011-01-16 8 views
3

厳密に型指定されたビューモデルの検証時に、検証属性を使用してクラスを検証する方法を教えてください。MVC検証属性

は、あなたがそうのようなビューモデルがあるとします。

[PropertiesMustMatch("Admin.Password", "Admin.ConfirmPassword")] 
public class AdminsEditViewModel 
{ 
    public AdminsEditViewModel() 
    { 
     this.Admin = new Admin(); // this is an Admin class 
    } 

    public IEnumerable<SelectListItem> SelectAdminsInGroup { get; set; } 


    public IEnumerable<SelectListItem> SelectAdminsNotInGroup { get; set; } 

    public Admin Admin { get; set; } 
} 

PropertiesMustMatchAttribute

object originalValue = properties.Find(OriginalProperty, true /* ignoreCase */).GetValue(value); 

のこの行のパスワードフィールドは、管理クラスおよびNOT AdminsEditViewModelの財産であるため、ときに私がnull例外を取得します。 ViewModel AdminsEditViewModelで管理者のプロパティが見つかるまで、どのように多くのレベルまで深く進むようにしますか? ありがとう

答えて

1

PropertiesMustMatchAttributeクラスを変更してプロパティ名を解析し、深く検索する必要があります。

この属性はフレームワークの一部ではありません。デフォルトのMVCテンプレート(AccountModels.cs)に含まれています
したがって、必要に応じて変更することができます。

具体的には、name.Split('.')を呼び出し、分割された名前をループしてプロパティ値を取得します。

object GetValue(object obj, string properties) { 
    foreach(strong prop in properties) 
     obj = TypeDescriptor.GetProperties(obj) 
          .Find(prop, ignoreCase: true) 
          .GetValue(obj); 
    } 
    return obj; 
} 
+0

どうすればよいかわかります。あなたはこれについてより多くの情報を提供してください。ありがとうございます – ShaneKm

+0

@シェーン:ここに行きます。 (テストされていない) – SLaks

+0

!ありがとう – ShaneKm

関連する問題