我有两个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属性上发生。
答案 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)
{
....
}
}