Пользовательский RegularExpressionAttribute отсутствует data-val-regex-pattern для проверки на стороне клиента
Я создал следующий пользовательский RegularExpressionAttribute
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)]
public class AlphaNumericAttribute: RegularExpressionAttribute, IClientValidatable
{
public AlphaNumericAttribute()
: base("^[-A-Za-z0-9]+$")
{
}
public IEnumerable GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
yield return new ModelClientValidationRule { ErrorMessage = FormatErrorMessage(metadata.GetDisplayName()), ValidationType = "alphanumeric" };
}
}
Поле в ViewModel украшено моим атрибутом AlphaNumeric:
[AlphaNumeric(ErrorMessageResourceType = typeof(Resources), ErrorMessageResourceName = Resources.DriverLicenseNumber_RegexError_)]
public string DriverLicenseNumber { get; set; }
Поле строится в виде:
@using (Html.BeginForm("Index", "Application", FormMethod.Post, new { id = "applicationDataForm", autocomplete = "off" }))
{
@Html.LabelFor(m => m.DriverLicenseNumber)
@Html.ValidationMessageFor(m => m.DriverLicenseNumber)
@Html.TextBoxFor(m => m.DriverLicenseNumber)
}
Это должно дать правильноеданные-" Атрибуты проверки моего входного тега HTML. Тем не менее, визуализированный тег выглядит следующим образом:
Заметно отсутствуютДанные-Val-регулярное выражение а такжеДанные-Val-регулярное выражение-паттерн атрибуты, которые должны быть представлены.
Я построил другие валидаторы с точно такой же структурой, и они работают правильно, как эта проверка SSN, которая обрабатывает замаскированные пространства для маскированного ввода с использованием маскирования jquery:}
public class SsnAttribute : RegularExpressionAttribute, IClientValidatable
{
public SsnAttribute()
: base("^([0-9]{3}–[0-9]{2}–[0-9]{4})|([ ]{3}–[ ]{2}–[ ]{4})|([0-9]{9,9})$")
{
}
public IEnumerable GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
yield return new ModelClientValidationRule { ErrorMessage = FormatErrorMessage(metadata.GetDisplayName()), ValidationType = "ssn" };
}
С приложением на ViewModel:
[Ssn(ErrorMessageResourceType = typeof(Resources), ErrorMessageResourceName = Resources.SocialSecurity_RegexError_)]
public new string SocialSecurityNumber { get; set; }
Поле строится в виде:
@using (Html.BeginForm("Index", "Application", FormMethod.Post, new { id = "applicationDataForm", autocomplete = "off" }))
{
@Html.LabelFor(m => m.SocialSecurityNumber)
@Html.ValidationMessageFor(m => m.SocialSecurityNumber)
@Html.TextBoxFor(m => m.SocialSecurityNumber)
}
Этот атрибут проверки корректно отображает атрибуты data-val-regex и data-val-regex-pattern:
Я не могу понять, что мне не хватает с атрибутом AlphaNumeric, что он не отображает соответствующие атрибуты HTML.