我在MVC 4中创建了一个自定义validateur:
public class FirstNameValidator : ValidationAttribute
{
private IRegistrationConfiguration _registrationConfiguration;
public string Category { get; set; }
public bool IsLocal { get; set; }
public FirstNameValidator()
{
_registrationConfiguration = DependencyResolver.Current.GetService<IRegistrationConfiguration>();
}
public FirstNameValidator(IRegistrationConfiguration registrationConfiguration)
{
_registrationConfiguration = registrationConfiguration;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value == null)
{
return new ValidationResult("Le prénom ne doit pas être vide");
}
else
{
if(string.IsNullOrEmpty(value.ToString()))
return new ValidationResult("Le prénom ne doit pas être vide");
else if(value.ToString().Length<2)
return new ValidationResult("Le prénom doit avoir + que 2 caractères");
else if (value.ToString().Length > 30)
return new ValidationResult("Le prénom doit avoir - que 30 caractères");
}
return null;
}
}
我在viewModel中使用此数据注释:
public class RegistrationViewModel
{
public string Country { get; set; }
public string Civility { get; set; }
[FirstNameValidator(Category = "Registration", IsLocal = false)]
public string FirstName { get; set; }
public string LastName { get; set; }
}
我如何进行客户端验证?
答案 0 :(得分:1)
在您的属性中实现IClientValidatable。
公共类FirstNameValidator:ValidationAttribute,IClientValidatable
编写javascript适配器并将其包含在您的视图中。
编写javascript验证规则本身并将其包含在您的视图中。
您可以搜索“asp.net mvc 4自定义客户端验证”以获取更多详细信息。 例如,您可以查看Custom data annotation validator或How to support client side custom validation
答案 1 :(得分:0)
根据您编写的代码,您可能最好使用RegularExpressionAttribute
。您可以使用"[A-Za-z]{1,30}$"
等模式来确保FirstName的长度介于1到30个字符之间。或者,您也可以使用RequiredAttribute
将字段标记为必填字段。
使用这些验证器的好处是它们已经连接到JQuery中的客户端验证。
如果必须使用自己的验证器,请实现IClientValidatable
,并编写自定义JQuery验证适配器。
顺便说一下,在我们的项目中,我们使用IsValid()
方法中的正则表达式模式匹配器来滚动我们自己的Validators。然后,我们通过regex
方法将其挂接到JQuery中现有的IClientValidatable
验证器适配器。我们这样做是为了控制正在使用的错误消息。
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
ModelClientValidationRule rule = new ModelClientValidationRule();
rule.ErrorMessage = ErrorMessages.ClientFieldInputValidation;
rule.ValidationType = "regex";
rule.ValidationParameters.Add("pattern", _regEx);
yield return rule;
}