ASP.net mvc不验证子模型

时间:2013-08-05 13:05:53

标签: asp.net-mvc validation

我有两个mvc模型

public class Model1
{
    [Required]
    public int Id {get;set;}
    [Required]
    public string Name {get;set;}
}

public class Model2
{
    public Model1 ValidateThis {get;set;}
    public Model1 DoNotValidateThis {get;set;}
}

在回发中我填写属性ValidateThis和DoNotValidateThis。我想验证仅在ValidateThis属性上发生。

3 个答案:

答案 0 :(得分:1)

默认型号装订器不支持此功能。您必须实现自己的模型绑定器:

  • 创建新属性DoNotValidateMeAttribute
  • 创建一个新的模型绑定器,在进行模型绑定时,检查DoNotValidateMeAttribute是否存在,如果没有,则进行模型绑定而不进行验证。

然后你会像这样注释你的模型

public class Model2
{
    public Model1 ValidateThis {get;set;}

    [DoNotValidateMe]
    public Model1 DoNotValidateThis {get;set;}
}

Google搜索“ASP.NET MVC中的自定义模型绑定器”应该可以帮助您入门。但请注意,这可能会成为一项非常重要的任务。

答案 1 :(得分:1)

通过更多的研究,我选择了下一个解决方案,对我来说效果很好。在控制器中,我将下一个代码用于验证。

        var results = new List<ValidationResult>();
        bool isValid = Validator.TryValidateObject(
        model2obj.ValidateThis,
        new ValidationContext(model2obj.ValidateThis, null, null), results,true);

        ModelState.Clear();

        foreach (ValidationResult validationResult in results)
        {
            ModelState.AddModelError("ValidateThis." + validationResult.MemberNames.First(), validationResult.ErrorMessage);
        }

答案 2 :(得分:0)

您可以在Model2上实现IValidatableObject接口

public class Model2 :  IValidatableObject
{
    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
       ....
    }
}