В ASP.NET MVC 3, как я могу получать сообщения об ошибках переменных, когда один и тот же сложный тип используется в 2 свойствах модели

#c# #asp.net #validation #asp.net-mvc-3 #data-annotations

#c# #asp.net #проверка #asp.net-mvc-3 #данные-аннотации

Вопрос:

У меня проблема, когда у меня есть класс телефонного номера, определенный следующим образом:

 public class TelephoneNumber
{
    [Required(ErrorMessage = "Phone number area code is required")]
    public string AreaCode { get; set; }

    [Required(ErrorMessage = "Phone number first 3 digits are required")]
    public string PhoneFirst3 { get; set; }

    [Required(ErrorMessage = "Phone number last 4 digits are required")]
    public string PhoneLast4 { get; set; }
}
  

В моей модели у меня есть 2 свойства, где каждое из них использует тип данных telephoneNumber.

 [DisplayName("*Cell Phone")]
public TelephoneNumber CellPhone { get; set; }

[DisplayName("*Work Phone")]
public TelephoneNumber WorkPhone { get; set; }
  

Я использую сводку проверки и хотел бы изменить сообщение об ошибке с «Требуется код города телефонного номера», чтобы указать, на какой номер телефона ссылается сообщение об ошибке. Например, «Требуется код города рабочего номера телефона» и «Требуется код города номера сотового телефона».

Также возможно ли добавить новый тип телефонного номера, такой как:

 [DisplayName("Home Phone")]
public TelephoneNumber HomePhone { get; set; }
  

Но не требуется домашний телефон?

Это упрощенная версия моей реализации, но если возможно изменить или установить аннотации данных для свойств сложных типов, чтобы у них могли быть разные аннотации проверки, настроенные в нескольких свойствах, содержащихся в одной и той же модели, это значительно упростило бы жизнь при создании классов, более сложных, чем простой номер телефона.

Спасибо.

Ответ №1:

Это проблема дизайна? Номер телефона, рабочий номер телефона и мобильный — это разные классы, которые, вероятно, должны наследоваться от абстрактного класса телефонных номеров.

Это позволило бы вам аннотировать каждый тип телефонного номера по своему усмотрению. Я бы также указал РЕГУЛЯРНОЕ выражение для проверки формата каждого числа.

Стоит подумать о том, что произойдет, если однажды я скажу, что рабочий номер телефона должен иметь добавочный номер, а также номер?

Принцип единой ответственности поиска, это может помочь. Удачи.

Комментарии:

1. Я попытался упростить пример, чтобы увести обсуждение от дизайна. Я согласен со всем, что вы заявили, но это не отвечает ни на один из моих вопросов. Например, что, если у меня есть домашний телефон 1 и домашний телефон 2, но требуется только один. Как я должен справиться с этой ситуацией?