Пустое значение RequestVerificationToken после скрытия элемента html с помощью jquery

У меня есть форма ASP.NET MVC 4, в которой есть флажки для отображения и скрытия некоторых элементов HTML. При посещении страницы формы значение RequestVerificationToken создается как скрытое поле правильно. Некоторые элементы HTML по умолчанию скрыты.

Затем я устанавливаю флажок, чтобы показать некоторые элементы HTML. После того, как я снимаю флажок (который скрывает эти элементы HTML), значение RequestVerificationToken исчезает.

Поэтому, когда я отправляю форму, нажав кнопку «Создать», появляется следующая ошибка:

Отсутствует обязательное поле формы защиты от подделки "__RequestVerificationToken".

Если я не сниму флажок обратно, значение для RequestVerificationToken присутствует, и форма будет успешно отправлена.

Элементы HTML отображаются скрытыми с помощью jQuery/javascript.

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

Я уже добавил атрибуты в метод действия Create, но не в метод GET:

// POST: /Document/Create
[HttpPost]
[ValidateAntiForgeryToken]
...

На странице «Создать форму» я также добавил:

@using (Html.BeginForm())
{
  @Html.AntiForgeryToken()
...

Вот Javascript для отображения и скрытия элементов:

$('div.section .input_control').change(function () {
var $target = $(this).closest('div').find('.showSection');
if (this.checked) {
    $target.show();

} else {
    if (confirm("Are you sure you want to exclude this section?") == true) {
        $target.hide();
        jQuery(':hidden').val('');
    } else {
        $(this).prop("checked", true);
    }
}
});

person Qwerty    schedule 14.01.2014    source источник
comment
Элемент действительно скрыт или он отключен? stackoverflow.com/ вопросы/1355728/   -  person Felipe Miosso    schedule 15.01.2014
comment
Элемент, который я скрываю с помощью флажка, — это div. У div есть style=display: none для скрытия и style= для отображения элемента. Разве это не правильно? Как это может удалить значение токена запроса?   -  person Qwerty    schedule 15.01.2014
comment
Можете ли вы показать свой javascript?   -  person Jason P    schedule 15.01.2014
comment
Хорошо, я добавил JS, не знаю, как правильно добавить отступы в этом редактировании кода.   -  person Qwerty    schedule 15.01.2014
comment
Ааааа я понял! Это строка: jQuery(':hidden').val(''); не так ли?? Я пытался удалить значение полей формы, когда они были скрыты, чтобы сбросить их. Какова альтернатива? Потому что он также удаляет RequestVerificationToken   -  person Qwerty    schedule 15.01.2014


Ответы (1)


Используйте jQuery .not(). http://api.jquery.com/not-selector/ или http://api.jquery.com/not/

Это будет примерно так:

$(':hidden').not('__RequestVerificationToken').val('');

Сделав это, вы получите все скрытые поля, кроме поля антиподделки.

person Felipe Miosso    schedule 14.01.2014