2014-01-23 1 views
2

У меня есть следующие модели на моем сайтеRegex на аннотации данных ведет себя по-разному на подсвойствах

[Table("UserProfile")] 
    public class UserProfile 
    { 
     [Key] 
     public int UserId { get; set; } 

     [DisplayName("E-Mail")] 
     [MaxLength(60)] 
     [RegularExpression(@"[a-zA-Z0-9_\\.-][email protected]([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}", ErrorMessage = "Invalid e-mail")] 
     public string MailAddress { get; set; } 

     public UserInfo userInfo{ get; set; } 
    } 
public class UserInfo 
    { 
     [Key, ForeignKey("UserProfile")] 
     public int UserProfileUserId { get; set; } 

     public virtual UserProfile UserProfile { get; set; } 


    [UIHint("PhoneNumbers")] 
    public List<PhoneNumber> PhoneNumbers { get; set; } 
[...] 
    } 
public class PhoneNumber 
{ 
    public int Id { get; set; } 

    [MaxLength(20)] 
    [DisplayName("Téléphone")] 
    [RegularExpression(@"^[+]?[0-9\s]{2,20}$", ErrorMessage = "Invalid")] 
    public string Phone { get; set; } 

    public int UserInfoId { get; set; } 
    [ForeignKey("UserInfoId")] 
    public Physician UserInfo { get; set; } 
} 

Когда я зарегистрировать пользователь, у меня есть следующий вид:

<div class="editor-label"> 
    @Html.LabelFor(model => model.MailAddressTemp) 
</div> 
<div class="editor-field"> 
    @Html.EditorFor(model => model.MailAddressTemp) 
    @Html.ValidationMessageFor(model => model.MailAddressTemp) 
</div> 

И валидация оК

Mail validation during registration

Однако, когда я пытаюсь мо dify почтовый адрес, с другой точки зрения

<div class="editor-label"> 
    @Html.LabelFor(model => model.UserProfile.MailAddress) 
</div> 
<div class="editor-field"> 
    @Html.EditorFor(model => model.UserProfile.MailAddress) 
    @Html.ValidationMessageFor(model => model.UserProfile.MailAddress) 
</div> 

Он не работает с той же самой почты enter image description here

Может кто-нибудь объяснить мне, почему регулярное выражение проверки не работает на подсвойств?

Кстати, у меня есть подтверждение номеров телефонов во время регистрации и изменения учетной записи.

Спасибо

+0

У вас не может быть проверка на стороне клиента на вложенных объектах. Аналогичная проблема уже была описана здесь: http://stackoverflow.com/questions/17153252/applying-data-annotations-to-sub-properties-of-the-view-model-in-mvc –

+0

Что вы можете сделать, это для создания PartialView, строго введенного в UserProfile, а затем передать ваш вложенный объект UserProfile в этот PartialView. Вы также можете использовать некоторую стороннюю библиотеку проверки, которая позволяет проверять на стороне клиента на вложенных объектах (например, FluentValidation). –

ответ

1

Чтобы сделать ответ более сложным:

  1. Вы не можете иметь на стороне клиента проверки на вложенных объектов.
  2. Вы можете заменить DataAnnotations на некоторую стороннюю библиотеку проверки, например, например. FluentValidatio.
  3. В целом DataAnnotations используются для простых сценариев. В случае более сложных сценариев, подобных этому с вложенными объектами, вы можете реализовать интерфейс IValidatableObject.
+0

Что головоломка меня заключается в том, что она работает с моим вложенным свойством «PhoneNumber». Я обновляю вопрос – Daniel

+0

Я обновил модели, и валидация работает с номерами телефонов. Я не понимаю, что валидация всегда неверна для почтового адреса. – Daniel

+0

Хорошо, я нашел ошибку. Я извлек регулярное выражение в константу, чтобы убедиться, что я использую один и тот же. И это решило проблему. Спасибо за вашу помощь! Поэтому у меня есть проверка на мое вложенное свойство. – Daniel

Смежные вопросы