Ошибка синтаксиса с parseJSON во время ненавязчивой проверки

В моем приложении MVC создается следующий HTML-код, который вызывает синтаксическую ошибку Javascript при представлении (я не ввожу ничего в два текстовых поля). Здесь созданный HTML и обработчик отправки:

<form action="/UrIntake/Save" id="UrIntakeForm" method="post">

    <input data-val="true" data-val-length="The field LastName must be a string with a maximum length of 50." data-val-length-max="50" data-val-required="The LastName field is required." id="FormSubmitter_LastName" name="FormSubmitter.LastName" type="text" value="" />
    <input data-val="true" data-val-length="The field FirstName must be a string with a maximum length of 50." data-val-length-max="50" data-val-required="The FirstName field is required." id="FormSubmitter_FirstName" name="FormSubmitter.FirstName" type="text" value="" />

    <div id="SubmissionButtons" class="right">
            <input type="button" onclick="SubmitForm()" value="Submit" />
            <input type="button" onclick="CancelForm()" value="Cancel" />
    </div>
</form>

    function SubmitForm() {
        $("#UrIntakeForm").valid();
.
.
.

Это код jQuery, в котором происходит синтаксическая ошибка (v1.9.0). "данные" undefined, а строка "return" - это ошибка:

parseJSON: function( data ) {
    // Attempt to parse using the native JSON parser first
    if ( window.JSON && window.JSON.parse ) {
        return window.JSON.parse( data );
    }

Предположительно, мне не нужно вводить что-либо в текстовые поля (и тогда должно появиться сообщение "поле обязательно" ). Это то, что вызывает ошибку? Это не имеет смысла, но я не понимаю, что еще может быть.

Ответы

Ответ 1

Причина

Это проблема с jquery.validate.unobtrusive.js в вашем пакете ASP.NET.MVC.

Как и в jQuery 1.9, поведение parseJSON() изменилось, и значение undefined будет считаться некорректным JSON, что приведет к указанной вами ошибке. Подробнее см. В Руководстве по обновлению ядра jQuery 1.9.

Решение

Используйте плагин jQuery Migrate, который, помимо прочего, добавляет обратно-совместимость к утилите jQuery parseJSON().


ИЗМЕНИТЬ

Согласно официальному объявлению в этом потоке в Microsoft Connect, проблема была устранена в последней версии фреймворка.

Естественно, как отметил Андреас Ларсен в комментариях, после обновления до новой версии обязательно очистите любой соответствующий кэш, сервер и клиентскую сторону.

Ответ 2

У меня также была эта проблема. Проблема заключалась в том, что $.parseJSON(undefined) вызывает исключение, и что ненавязчивая проверка делала этот вызов. Как указано в принятом ответе, с тех пор это исправлено.

Вы можете загрузить версию Microsoft этого script, которая будет правильно проверять, не вызывая исключения из этой ссылки: http://ajax.aspnetcdn.com/ajax/mvc/5.1/jquery.validate.unobtrusive.min.js p >