簡體   English   中英

ASP.NET MVC復雜模型驗證

[英]ASP.NET MVC Complex Model Validation

我有一個復雜的模型

public class ComplexModel
{

    public UserModel userModel;

    public ExtraInfoModel extraModel;
}

哪里

UserModel可能具有必填字段

如:

public class UserModel
{

     [Required]
     public string email;
}

如何驗證ComplexModel,以確保在ComplexModel驗證中考慮其成員模型上的數據注釋?

謝謝。

更新:

這是我的確切情況。 當我在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)
    {
    }
}

我認為默認的模型綁定器可以正確地進行此操作,從而驗證使用數據注釋的子模型。 您實際上有什么問題? 例如,我有類似以下內容:

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

     ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM