#validation #asp.net-mvc-3 #razor
#проверка #asp.net-mvc-3 #razor
Вопрос:
Я использую MVC 3 с razor в качестве механизма просмотра и включенной ненавязчивой клиентской проверкой.
Я пытаюсь создать форму, в которой у пользователя есть группа переключателей, чтобы выбрать предпочитаемый способ связи — телефон или электронную почту. В зависимости от выбранной опции я хочу отобразить соответствующее текстовое поле, но затем также включить / отключить требуемый валидатор для соответствующего текстового поля.
На данный момент моя разметка выглядит примерно так (только начинаю с MVC, поэтому, пожалуйста, укажите на любые очевидные ошибки):
<div id="prefferedContact">
<p>Preferred Contact Method *</p>
<input type="radio" id="contactMethodEmail" name="PreferredContactMethod" value="email" @if (Model.PreferredContactMethod != "phone"){<text>checked="checked"</text>} /> <label for="contactMethodEmail">by email</label>
<input type="radio" id="contactMethodPhone" name="PreferredContactMethod" value="phone" @if (Model.PreferredContactMethod == "phone"){<text>checked="checked"</text>} /> <label for="contactMethodPhone">by phone</label>
</div>
<div id="contactMethodDetails" class="formItem">
<div id="emailAddressBox">
@Html.LabelFor(x => x.Email, "Email address")
@Html.TextBoxFor(x => x.Email, new { @class = "textbox" })
</div>
<div id="phoneNumberBox">
@Html.LabelFor(x => x.PhoneNumber, "Phone number")
@Html.TextBoxFor(x => x.PhoneNumber, new { @class = "textbox" })
</div>
</div>
</div>
</div>
Есть некоторая функция jquery, которая добавляет событие onclick к переключателям для переключения между двумя полями в зависимости от выбранного значения.
В модели — для этих конкретных полей — на данный момент нет никакой требуемой проверки, но привязка выполняется нормально. Кроме того, проверка работает с другими полями, как и ожидалось
Мне действительно просто нужно получить представление о:
(а) возможно ли включать и выключать проверку
(б) влияет ли это каким-либо образом на проверку состояния модели (или мне нужно ее настроить)
Я также думал о том, чтобы иметь одно текстовое поле для контактных данных, но я хотел иметь проверку регулярным выражением для электронной почты и для номера телефона отдельно. Если бы у меня было одно текстовое поле, мог бы я переключать правила проверки в текстовом поле в зависимости от выбранного параметра???
Надеюсь, это достаточно понятно с достаточным количеством информации.
Спасибо
Джоэл
Ответ №1:
Вы можете выполнить проверку на уровне класса, если вам нужно применить правила, основанные на нескольких свойствах:
К сожалению, это, похоже, работает только на стороне сервера, поэтому вам придется реализовать пользовательскую проверку на стороне клиента.
Другим вариантом было бы иметь две разные модели, по одной для каждого сценария (с общими свойствами в базовом классе), но это может быть немного сложнее.