Я пытаюсь подтвердить номер телефона, который содержится в двух полях.
В первом поле отображается код города, а в другом поле отображаются оставшиеся цифры номера телефона.
Требования:
- Они оба обязательны.
- Они должны быть числовыми.
- Поле кода города должно содержать не более 6 цифр, а поле номера телефона должно содержать не более 10 цифр.
Для обоих полей требуется отображать одно сообщение. Например, если код города отсутствовал, но был указан номер телефона, после обоих полей должно отображаться одно сообщение с указанием «Пожалуйста, введите номер телефона». .
Модель, которая у меня сейчас есть, похожа на:
public class Customer
{
//...other fields here
public string AreaCode { get; set; }
public string PhoneNumber { get; set; }
}
Я не могу реализовать телефон как одно поле с регулярным выражением или симларом.
Здесь есть вопрос, похожий на этот здесь (и также похож на здесь ), где в ответе рекомендуется создать пользовательский атрибут проверки (в данном случае с именем MultiFieldRequired
) указать имена полей, которые являются обязательными в атрибуте. Атрибут проверки затем использует отражение, чтобы проверить значения других свойств, чтобы сообщить о наличии ошибки.
Например, в случае вышеупомянутой модели, я считаю, что я должен иметь:
public class Customer
{
//...other fields here
public string AreaCode { get; set; }
[MultiFieldRequired("AreaCode", "PhoneNumber", ErrorMessage="Please enter a phone number")]
public string PhoneNumber { get; set; }
}
Однако, я столкнулся с небольшой проблемой с предоставленным решением. Ошибка, возвращаемая пользовательским атрибутом проверки, сообщается только для поля, в котором есть аннотация данных (PhoneNumber - модель выше). Поэтому, если AreaCode не введен пользователем, но PhoneNumber указан, ошибка сообщается в поле PhoneNumber, а не в AreaCode. Кроме того, если вы используете CSS, поставляемый с интернет-проектом visual studio, поле PhoneNumber, поставляемое в комплекте, будет отображаться красным, а недопустимый код области отображается белым (без ошибки), поэтому это выглядит немного странно.
У кого-нибудь есть способ исправить это поведение окраски или способ, которым я могу сообщить об ошибке, если какое-либо поле содержит ошибку (используя правильную окраску на полях)?
Заранее спасибо.