Удаленная проверка MVC не работает

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

Рабочий вариант:

Вид:

@Html.EditorFor(model => model.ClassNumber, new { @id = "ClassNumber" })
@Html.ValidationMessageFor(model => model.ClassNumber)

Модель:

[EdmScalarPropertyAttribute(EntityKeyProperty = false, IsNullable = false)]
[Required(ErrorMessage = "Required")]
[Remote("CheckClassNumber", "Course", AdditionalFields = "Title", HttpMethod = "POST",
    ErrorMessage = "Already Exists")]
[DataMemberAttribute()]
public global::System.Int32 ClassNumber
{

Метод:

[HttpPost]
public JsonResult CheckClassNumber(int ClassNumber, int Title)
{
    var course = db.Courses.Any(c => c.ClassNumber.Equals(ClassNumber) && c.Title.Equals(Title));

    return Json(!course);
}

Исходный код:

    <select class="chzn-select" data-placeholder=" -- Select Course -- " data-val="true" data-val-number="The field Title must be a number." data-val-required="Required" id="Title" name="Title">
        <option value=""></option>
        <option value="1">Option 1</option>
        <option value="2">Option 2</option>
        <option value="3">Option 3</option>
    </select>
    <span class="field-validation-valid" data-valmsg-for="Title" data-valmsg-replace="true"></span>

Не работает

Вид:

@Html.DropDownListFor(model => model.Student,
    @ViewBag.StudentID as SelectList, "",
    new { @class = "chzn-select", data_placeholder = " -- Select Student -- " })
@Html.ValidationMessageFor(model => model.Student)

Модель:

[EdmScalarPropertyAttribute(EntityKeyProperty = false, IsNullable = false)]
[Required(ErrorMessage = "Required")]
[Remote("CheckIfEnrolled", "Enrollment", AdditionalFields = "Course", HttpMethod = "POST",
    ErrorMessage = "Already Enrolled")]
[DataMemberAttribute()]
public global::System.Int32 Student
{

Метод:

[HttpPost]
public JsonResult CheckIfEnrolled(int Student, int Course)
{
    var exists = db.Enrollments.Any(e => e.Course.Equals(Course) && e.Student.Equals(Student));

    return Json(!exists);
}

Исходный код:

<select class="chzn-select" data-placeholder=" -- Select Student -- " data-val="true" data-val-number="The field Student must be a number." data-val-remote="Already Enrolled" data-val-remote-additionalfields="*.Student,*.Course" data-val-remote-url="/QIEducation/Enrollment/CheckIfEnrolled" data-val-required="Required" id="Student" name="Student">
    <option value=""></option>
    <option value="8">Option 1</option>
    <option value="10">Option 2</option>
    <option value="11">Option 3</option>
</select>
<span class="field-validation-valid" data-valmsg-for="Student" data-valmsg-replace="true"></span>

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


person C-Pfef    schedule 17.08.2015    source источник


Ответы (1)


Хорошо. Оказывается, выбранный плагин превращает выбранные элементы в скрытый элемент. Это означает, что проверка не будет проверять его по умолчанию. Я нашел несколько решений, которые работали для других людей, но не для меня. Я закончил тем, что заставил проверку на изменение.

<script type="text/javascript">
    //Have to force a validation on change.
    $('#Student').on('change', function () {
        $('#Student').valid();
    });
</script>

Работает каждый раз и не меняет значения по умолчанию в файле jquery.

person C-Pfef    schedule 17.08.2015
comment
Вы можете просто добавить $.validator.setDefaults({ ignore: [] });, чтобы проверка jquery включала скрытые поля - person ; 18.08.2015