对于给定的变量,是否有办法针对它调用现有的验证函数?
我在模型绑定器中做了一些额外的手动验证,这样做很好,而不是做:
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错误字典。
答案 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);
}
}