MVC CheckBox для обхода ненавязчивой проверки

У меня есть форма, содержащая ряд элементов управления - ничего особенного:

@using (Html.BeginForm()) {
    @Html.AntiForgeryToken()
    <fieldset>
        <legend>EmployeeViewModel</legend>
        <div class="editor-label">
            @Html.LabelFor(model => model.Employee.Title)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Employee.Title)
etc.....

ОБНОВЛЕНИЕ Моя ViewModel:

public class EmployeeCreateViewModel
    {
        public EmployeeCreateModel Employee { get; set; }
..etc

Моя модель сотрудника:

public class EmployeeCreateModel
    {
        [Required]
        public string Title { get; set; }

        [DisplayName("Job Title")]
        [Required]
        public string JobTitle { get; set; }

        public bool Active { get; set; }
...etc

Проблема. Я использую ненавязчивую проверку, которая работает нормально, пока я не добавлю флажок в форму. Независимо от состояния флажка форма отправляется в обход проверки на стороне клиента, а ошибки перехватываются проверкой на стороне сервера. Это мой флажок:

<div class="editor-label">
   @Html.LabelFor(model => model.Employee.Active)
</div>
<div class="editor-field">
   @Html.CheckBoxFor(model => model.Employee.Active)
</div>

Свойство модели флажка не является обязательным полем, поэтому его не нужно проверять, и я вижу, что оно имеет допустимое значение True/False, когда оно достигает метода контроллера.

Почему это происходит, и как я могу это исправить?


person markpsmith    schedule 11.10.2013    source источник
comment
Итак, вы не хотите, чтобы в контроллере было указано false, если он не отмечен?   -  person Andrew    schedule 11.10.2013
comment
@Andrew - значение, переданное контроллеру, является ложным, если оно не проверено   -  person markpsmith    schedule 11.10.2013
comment
@markpsmith, какие ошибки обнаруживаются проверкой на стороне сервера? Тот факт, что флажок имеет значение, когда он не отмечен, не означает, что он проверяется. Именно так работают флажки в MVC. Логическое значение должно быть True или False, поэтому, когда оно не отмечено, False является правильным.   -  person Andrew    schedule 11.10.2013
comment
@Andrew Эндрю - флажок НЕ является одной из ошибок, обнаруженных на стороне сервера, но я все равно не заинтересован в его проверке.   -  person markpsmith    schedule 11.10.2013
comment
Могу я просто уточнить - вы говорите, что когда вы добавляете флажок в форму, вся проверка на стороне клиента для всей формы обходится, а когда вы снимаете флажок, проверка на стороне клиента снова работает?   -  person ED-209    schedule 11.10.2013
comment
@whoshotjr - это правильно. Проверка на стороне клиента отображается в течение секунды, пока форма публикуется, затем страница обновляется, и отображается проверка на стороне сервера.   -  person markpsmith    schedule 11.10.2013
comment
Похоже, у других была похожая проблема. На этот вопрос нет ответов: заголовок stackoverflow.com/questions/18415655/   -  person ED-209    schedule 11.10.2013
comment
@whoshotjr - хорошая находка. Я ответил на этот вопрос своим обходным путем, но я все же хотел бы выяснить причину проблемы.   -  person markpsmith    schedule 11.10.2013
comment
Нашел еще один - можешь ответить и на него! stackoverflow.com/questions/18391025/   -  person ED-209    schedule 11.10.2013
comment
@whoshotjr - это было бы просто жадно! Вместо этого я разместил ссылку в комментариях. ваше здоровье.   -  person markpsmith    schedule 11.10.2013
comment
Та же проблема здесь. Я заметил, что по умолчанию он добавляет атрибуты data-val-required и data-val к ​​флажку по умолчанию. Когда они есть, возникают проблемы, которые вы описываете. Когда я удаляю их с помощью инспектора, форма проверяется по желанию. Таким образом, CheckBoxFor автоматически добавляет необходимые атрибуты.   -  person tjans    schedule 25.08.2016


Ответы (1)


Сначала откройте консоль javascript (например, панель инспектора Chrome) и посмотрите, не появляется ли ошибка Uncaught TypeError: Object [object Object] не имеет метода 'live' от jquery.unobtrusive-ajax.js.

Если вы видите эту ошибку, возможно, вы используете jquery 1.9.x или выше. Если вы установите флажок «Сохранить журнал при переходе» (хром), вы увидите сообщение об ошибке «Uncaught SyntaxError: Unexpected token u».

Чтобы решить эту проблему, включите jquery migrate 1.2.x после jquery 1.9.x.

<script src="/Scripts/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>

Подробнее см. в этом публикации.

person jpark7ca    schedule 13.11.2013