Проверка данных аннотаций данных ASP.NET MVC на стороне клиента с унаследованным атрибутом RegularExpressionAttribute
Чтобы поддерживать чистоту проверки моей модели, я хотел бы реализовать свои собственные атрибуты проверки, такие как PhoneNumberAttribute
и EmailAttribute
. Некоторые из них могут быть реализованы в виде простых классов, которые наследуются от RegularExpressionAttribute
.
Однако я заметил, что выполнение этого нарушает проверку этих атрибутов на стороне клиента. Я предполагаю, что существует какая-то привязка типов, которая где-то не срабатывает.
Любые идеи, что я могу сделать, чтобы проверка на стороне клиента работала?
Пример кода:
public sealed class MailAddressAttribute : RegularExpressionAttribute
{
public MailAddressAttribute()
: base(@"^[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4}$")
{
}
}
Ответы
Ответ 1
Вам нужно будет зарегистрировать адаптер проверки на стороне клиента для вашего настраиваемого атрибута. В этом случае вы можете использовать существующий RegularExpressionAttributeAdapter в System.Web.Mvc, так как он должен работать точно так же, как стандартный атрибут regex. Затем зарегистрируйте его, когда ваше приложение начнет использовать:
DataAnnotationsModelValidatorProvider.RegisterAdapter(
typeof(MailAddressAttribute),
typeof(RegularExpressionAttributeAdapter));
Если вы пишете атрибут, который требует выборочной проверки на стороне клиента, вы можете реализовать свой собственный адаптер, наследуя DataAnnotationsModelValidator (см. также блог Фила Хаака).
Ответ 2
расширение правильного ответа
public class EmailAttribute : RegularExpressionAttribute
{
static EmailAttribute()
{
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(EmailAttribute), typeof(RegularExpressionAttributeAdapter));
}
public EmailAttribute()
: base(@"^[a-zA-Z0-9_.+-][email protected][a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$") //^[a-zA-Z0-9_.+-][email protected][a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$
{
}
}