我遇到了一个场景,我需要知道哪个属性当前正在自定义中验证ValidationAttribute.我认为这在MVC 3中很容易,因为ValidationContext它被传递到IsValid方法中.
没有详细说明,这是基本的想法:
protected override ValidationResult IsValid(Object value, ValidationContext validationContext) {
if (ShouldICareAboutYou(validationContext.MemberName))
{
//Do some stuff
}
//Return the results
}
Run Code Online (Sandbox Code Playgroud)
这似乎是完美的解决方案,事实上,当使用Validator.TryValidateObject一切工作精美地对我的自定义ValidationAttribute进行单元测试时!
然而...
在调用时TryUpdateModel,或TryValidateModel在我的控制器中,验证运行,但ValidationContext.MemberName为null.
哇啊?!?
我做了一点调查,果然,内部DataAnnotationsModelValidator就是代码......或缺乏代码.
public override IEnumerable<ModelValidationResult> Validate(object container) {
// Per the WCF RIA Services team, instance can never be null (if you have
// no parent, you pass yourself for the "instance" parameter).
ValidationContext context = new …Run Code Online (Sandbox Code Playgroud)