ASP.Net MVC 2 控制器的 TryValidate 不验证列表<>模型内的项目
如何获得模型的验证以验证通用列表属性中的子对象。
我有一个正在尝试验证的模型,这不是发布到服务器的内容,而是发布的一些信息和服务器上已有信息的组合......例如。
...
public class A {
[Required]
public string Property1 { get; set; }
}
...
public class B {
public List<A> Values { get; set; }
}
...
if (!TryValidateModel(instanceofB))
{
//this should fire, as one of A inside B isn't valid.
return View(instanceofB);
}
当我尝试验证 B 的模型实例时,它不会验证 Values 集合的验证属性。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
TryValidateModel
方法仅向下一级,因此它仅检查B
类型对象上的Validation
属性,而不检查其嵌套对象。克服这个问题的一种方法是定义您自己的ValidationAttribute
实现:现在可以使用该属性验证
List
:我还没有测试上述性能彻底的方法,但如果在你的情况下证明是一个问题,另一种方法是使用辅助函数:
The
TryValidateModel
method only goes down one level so it only checks forValidation
attributes on the object of typeB
, not on its nested objects. One way to overcome this is to define your own implementation of aValidationAttribute
:Now
List<A>
can be validated using the attribute:I haven't tested performance for the above approach thoroughly but if in your case that turns out to be a problem, an alternative approach is to use a helper function:
我有一个类似的问题,我通过完全避免调用 TryValidate 来解决。我调用 TryValidate 的原因是因为我需要对模型进行一些更改,然后进行验证。我最终为模型创建了一个接口,并将默认模型绑定器替换为可识别该接口并调用我的方法的模型绑定器。这一切都发生在框架第一次调用验证之前(这是递归的)。
I had a similar issue that I fixed by avoiding the call to TryValidate altogether. The reason I called TryValidate was because I needed to do make some changes on my model and then do the validation. I ended up creating an interface for the model and replaced the default model binder with one that recognizes the interface and calls my method. This all happens before the framework calls validate the first time (which is recursive).