2010-10-27 161 views
0

我有一個複雜的模型ASP.NET MVC的複雜模型驗證

public class ComplexModel 
{ 

    public UserModel userModel; 

    public ExtraInfoModel extraModel; 
} 

其中

的usermodel可能必填字段

爲:

public class UserModel 
{ 

    [Required] 
    public string email; 
} 

我怎麼驗證ComplexModel以確保其成員模型上的數據註釋正在被帶入Compl中的帳戶exModel驗證?

謝謝。

更新:

這是我的確切場景。當我在ManageProfileModel的控制器操作中調用ModelState.IsValid時,無論是否設置了GeneralInfoModel的ListModelRequired成員的「SelectedValue」,模型狀態都是有效的。

public class ManageProfileModel 
{ 
    [Required(ErrorMessage="Experience is required")] 
    public int LevelOfExperienceTypeID { get; set; } 
    public GeneralInfoModel GeneralInfoModel { get; set; } 
} 

public class GeneralInfoModel 
{ 
    [Required] 
    [DisplayName("Profile Headline")] 
    public string ProfileName { get; set; } 

    [DisplayName("Signature")] 
    public string Signature { get; set; } 

    [Required] 
    public ListModelRequired LevelOfExperience { get; set; } 
} 

public class ListModel 
{ 
    public ListModel() 
    { 
    } 

    public ListModel(string name) 
    { 
     this.Name = name; 
    } 

    public ListModel(string name, string selectedValue):this(name) 
    { 
     this.SelectedValue = selectedValue; 
    } 

    public ListModel(string name, IEnumerable<SelectListItem> members):this(name) 
    { 
     this.Members = members; 
    } 

    public ListModel(string name, IEnumerable<SelectListItem> members, string selectedValue) 
     : this(name, members) 
    { 
     this.SelectedValue = selectedValue; 
    } 

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

    public string Name { get; set; } 

    public virtual string SelectedValue { get; set; } 

    public string Label { get; set; } 
} 

public class ListModelRequired : ListModel 
{ 
    [Required] 
    public override string SelectedValue { get; set; } 

    public ListModelRequired():base() 
    { 
    } 

    public ListModelRequired(string name):base(name) 
    { 
    } 

    public ListModelRequired(string name, string selectedValue):base(name,selectedValue) 
    { 
    } 

    public ListModelRequired(string name, IEnumerable<SelectListItem> members) 
     : base(name, members) 
    { 
    } 

    public ListModelRequired(string name, IEnumerable<SelectListItem> members, string selectedValue) 
     : base(name, members,selectedValue) 
    { 
    } 
} 

回答

0

我認爲默認模型聯編程序得到這個權限,驗證使用數據註釋的子模型。你真的有什麼問題嗎?例如,我有類似的東西:

public class OnlineDonationModel 
{ 
    [Required] 
    public decimal? Amount { get; set; } 

    public ContactModel Contact { get; set; } 
} 

public class ContactModel 
{ 
    [Required] 
    public string FirstName { get; set; } 

    [Required] 
    public string LastName { get; set; } 

    [Required] 
    public string Address { get; set; } 

    ... 
} 
+0

我剛剛發佈了一個更新我的問題。它看起來不像DefaultModelBinder正在處理我的情況。任何見解都非常感謝。 – alexm 2010-10-27 19:24:06

+0

我看到的唯一區別是您正在製作實際需要的子模型實例。我想如果你在子模型上需要屬性,那麼這些屬性仍然會起泡,所以你不應該需要它。嘗試刪除子模型實例上的必需屬性,看看它是否更改。 – tvanfosson 2010-10-27 21:04:07

+0

這就是我所想的。但事實並非如此。所以,出於試圖找到修復,我試圖在頂級模型的成員上添加[必需]。 – alexm 2010-10-28 01:35:56