2

我有两个 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 属性上。

4

3 回答 3

1

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

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

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

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

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

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

于 2013-08-05T13:49:13.220 回答
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);
        }
于 2013-08-06T08:40:28.940 回答
0

您可以IValidatableObject在 Model2 上实现接口

public class Model2 :  IValidatableObject
{
    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
       ....
    }
}
于 2013-08-05T13:35:34.593 回答