Эта проблема тесно связана с кодом и проблемой, с которой я столкнулся в моем предыдущем посте: Как опубликовать данные таблицы, не обновляя мое представление после удаления записи? .
Iиметь метод CheckOut GET, который создает модель Order и возвращает ее в представление CheckOut. У меня также есть метод CheckOut POST, который обрабатывает модель заказа POST после заполнения дополнительных полей в представлении CheckOut и отправки формы.
Я сталкиваюсь с проблемой, когда ModelState.IsValid == false. Когда это происходит, я возвращаю заказ в окно оформления заказа и отображаю ошибку. Однако если в этот момент я удаляю элементы из таблицы в представлении CheckOut и обновляю страницу, удаленные элементы возвращаются в таблицу.
Этого не произойдет, если я удаляю элементы со своей таблицы и обновляю страницу, прежде чем что-либо отправлено. Причина этого, конечно, в том, что метод CheckOut GET перестраивает модель Order из обновленных таблиц в базе данных.
То, что я пробовал:
Если ModelState.IsValid == false в CheckOut POST, перенаправить на действие CheckOut GET. Это исправило проблему, но добавило новую, где, если форма была заполнена неправильно, представление отображало ошибки формы для пользователя. Я предполагаю, что это потому, что ModelState был очищен.
Еще одно потенциальное решение - перестраивать модель Order каждый раз, когда я ВЫСТАВЛЯЮЩУ представление CheckOut. Однако я не хочу снова перестраивать Орден. Я уже делаю это в методе GET.
Метод GET CheckOut:
[HttpGet]
public IActionResult CheckOut(string Id)
{
Order order = new Order();
order.CartId = Id;
//populate order object's parameters
return View(order);
}
Метод POST CheckOut
[HttpPost]
public IActionResult CheckOut(Order order)
{
if (ModelState.IsValid == false)
{
return View("CheckOut", order);
}
//process the order object
return RedirectToAction("PurchaseSummary", new { Id = order.OrderId });
}
My CheckOut View: https://i.imgur.com/gbl3kSH.png Если бы я должен был удалить элемент из таблицы и обновить представление без повторной отправки его, метод POST CheckOut запустился бы, и элемент вернулся бы в таблицу. Я ожидаю, что таблица не будет содержать элемент при обновлении.
РЕДАКТИРОВАТЬ: я помещаю коллекцию FormCollection в HttpPost и, в случае обновления страницы, старые элементы все еще находятся в коллекции.