Проверка переключения в MVC 3 Razor - PullRequest
3 голосов
/ 14 апреля 2011

Я использую MVC 3 с бритвой в качестве движка просмотра и включенной ненавязчивой проверкой клиента.

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

В данный момент моя разметка выглядит примерно так (Просто начните с 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 кпереключатели для переключения между двумя полями в зависимости от выбранного значения.

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

Мне просто нужно понять:

(а) можно ли включать и выключать валидацию(b) влияет ли это на проверку ModelState в любом случае (или мне нужно ее настроить)

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

Надеюсь, это достаточно ясно и достаточно информации.

Спасибо

Joel

1 Ответ

1 голос
/ 02 мая 2011

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

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

Class-level validation

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...