未在viewmodel内的模型上调用Validate方法

时间:2014-10-20 18:00:20

标签: c# asp.net-mvc asp.net-mvc-4

我是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问题,但我不知道。谢谢你的帮助。

2 个答案:

答案 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; }

......例如。