У меня проблема с тем, что токен защиты от подделки отсутствует на 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>
}
}