如何为视图模型添加自定义验证方法



我尝试为ViewModel类添加自定义验证器:

[Serializable]
public class UserViewModel : IValidatableObject 
{
    public IEnumerable<ValidationResult> Validate(ValidationContext context)
    {
        yield return new ValidationResult("Fail this validation");
    }
}

不幸的是,这不会在Action方法被调用时触发,例如

    [HttpPost]
    public ActionResult Edit(UserViewModel user)

如何添加自定义验证逻辑?ValidationAttribute没有提供足够简单的解决方案。我无法找到关于MVC2验证机制的明确信息。

在ASP中不支持IValidatableObject。NET 2.0。在ASP中添加了对该接口的支持。asp.net MVC 3。您可以定义一个自定义属性:

[AttributeUsage(AttributeTargets.Class)]
public class ValidateUserAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        UserViewModel user = value as UserViewModel;
        // TODO: do some validation
        ErrorMessage = "Fail this validation";
        return false;
    }
}

,然后用这个属性装饰视图模型:

[Serializable]
[ValidateUser]
public class UserViewModel
{
}

您的语法看起来正确。在您尝试验证模型之前,验证不会被"触发"。你的控制器代码应该像这样

[HttpPost]
public ActionResult Edit(UserViewModel user)
{
    if(ModelState.IsValid)
    {
        // at this point, `user` is valid
    }
    // since you always yield a new ValidationResult, your model shouldn't be valid
    return View(vm);
}

相关内容

  • 没有找到相关文章

最新更新