Переключение проверки в MVC 3 Razor

#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:

Вы можете выполнить проверку на уровне класса, если вам нужно применить правила, основанные на нескольких свойствах:

http://weblogs.asp.net/scottgu/archive/2010/12/10/class-level-model-validation-with-ef-code-first-and-asp-net-mvc-3.aspx

Проверка на уровне класса

К сожалению, это, похоже, работает только на стороне сервера, поэтому вам придется реализовать пользовательскую проверку на стороне клиента.

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