Антивирусный токен отсутствует после обновления частичного просмотра - PullRequest
0 голосов
/ 04 декабря 2018

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

У меня есть страница с 2 таблицами.Первая таблица (таблица сводных представлений) представляет собой сводку элементов, отображаемых во второй таблице, и щелчок по строкам в сводном представлении обновляет данные во второй таблице (таблица подробных представлений).Данные в сводном представлении отображаются непосредственно на странице с использованием цикла foreach, но данные в подробном представлении отображаются через частичное представление, что позволяет мне обновлять данные без обновления всей страницы.

InВ таблице подробного представления можно обновить некоторые значения в каждой из строк, войдя в режим редактирования, а затем вызвав событие отправки формы нажатием кнопки.Это прекрасно работает при начальной загрузке страницы, я могу добавить новые строки в подробный вид и изменить новые или существующие строки без каких-либо проблем.Однако, как только я обновляю данные в подробном представлении, щелкая строку итогового представления и пытаясь обновить любое из значений, я получаю _The required anti-forgery form field "__RequestVerificationToken" is not present.

. При проверке источника страницы присутствует маркер защиты от подделки.Однако значение изменяется при каждом обновлении частичного представления, даже если я загружаю один и тот же набор данных.Если я скопирую токен с исходной страницы (прежде чем перезагрузить частичное представление) и загрузлю тот же набор деталей, я смогу изменить исходный код страницы и заменить новый токен на предыдущий токен, и тогда я смогу успешно POSTформа;в основном ...

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

Кто-нибудь испытывал / решал подобную проблему раньше?Я нашел одно сообщение, которое было похоже на мою проблему, но ответов не было, и оно было опубликовано еще в 2016 году. Я обратился к ФП, но не уверен в своевременном ответе, поэтому надеюськто-то еще имел дело с токенами против подделки внутри частичных представлений и может указать мне правильное направление.

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

Если какой-то код поможет лучше понять проблему, пожалуйста, дайте мне знать, и я 'Буду рад опубликовать некоторые из них.

Заранее благодарен за любую помощь с этим.

[HttpGet]
public  ActionResult  ShowTimesheet(long  timesheetId)
{
    return  PartialView("_TimeEntriesPartial",
    _timesheetService.GetById(timesheetId).TimeEntries);
}

Просмотр

<tbody >
    @Html.Partial("_TimeEntriesPartial", Model.Timesheet.TimeEntries);
</tbody>

Частичное представление

@model IEnumerable<ProjectTime.Model.Entities.TimeEntry>
@foreach (var  TimeEntry  in  Model)
{
    using (Html.BeginForm("UpdateTimeEntry", "Home", FormMethod.Post, new { id  =  TimeEntry.Id }))
    {
    @Html.AntiForgeryToken()
    <tr>
        columns...
        <td>Controls for switching mode and submitting item</td>
    </tr>
    }
}

1 Ответ

0 голосов
/ 13 декабря 2018

Чтобы ответить на мой собственный вопрос, основная причина проблемы заключалась в том, что я вставлял форму в таблицу, которая не является допустимым HTML.Когда я сделал это за пределами стола, это работает.

...