手动验证变量

时间:2017-11-06 13:42:32

标签: c# asp.net-mvc validation asp.net-mvc-5

对于给定的变量,是否有办法针对它调用现有的验证函数?

我在模型绑定器中做了一些额外的手动验证,这样做很好,而不是做:

if (Session["abc"] != "blah")
{
ModelState.AddModelError("", "whoops");
}

如果我可以某种方式连接到验证器测试所述变量,那么它更像是:

var X = new Validatable(Session["abc"]);
X.addValidation(new RequiredAttribute());
X.addValidation(new RegexAttribute(some regex));

X.Validate() 

将添加到ModelState错误字典。

1 个答案:

答案 0 :(得分:0)

您可以在ViewModel上实现IValidatableObject,这将在Model Binding上设置ModelState字典中的错误。然后重用现有的System.ComponentModel.DataAnnotations属性进行实施。

using System.ComponentModel.DataAnnotations;
using System.Web;

public class MyViewModel : IValidatableObject {

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) {

        var sessionValue = HttpContext.Current.Session["abc"];

        yield return new RequiredAttribute {
            ErrorMessage = "error message: required"
        }.GetValidationResult(sessionValue, validationContext);

        const string pattern = "^([a-zA-Z0-9]+)$";
        yield return new RegularExpressionAttribute(pattern) {
            ErrorMessage = "error message: regex"
        }.GetValidationResult(sessionValue, validationContext);
    }
}