我是MVC.NET的新手,似乎无法理解为什么我的验证函数没有被调用,它位于MyModel类中。
MyModel:
Public string Name { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) {
// validation logic which is not being called on post.
}
当我发布表单时,我实际上发布了具有MyModel属性的ViewModel。
ViewModel:
Public MyModel { get; set; }
控制器:
[HttpPost]
public ActionResult Index(ViewModel model)
{
// this is always true??
if(this.ModelState.IsValid) { blah blah }
}
它始终为真的原因是因为MyModel中的验证逻辑没有从POST上的ViewModel调用。
这可能是一个noob问题,但我不知道。谢谢你的帮助。
答案 0 :(得分:3)
感谢您的回复。我实际上和一位同事交谈过,他告诉我,为了让ViewModel发布并对viewmodel中引用的类进行验证,我需要从IValidatableObject继承
public class MyModel : IValidatableObject
比我刚才需要将ValidationContext validationContext传递给Validate方法。
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
}
它有效!它在发布ViewModel时调用了MyModel的验证方法。
答案 1 :(得分:0)
您还可以查看DataAnnotations以了解您的验证要求;它可能会在您的模型中产生更清晰的代码:
using System.ComponentModel.DataAnnotations;
[Required(ErrorMessage="Please supply a Name")]
[RegularExpression(@"^([A-Za-z]{1,50}$")]
Public string Name { get; set; }
......例如。