Как сохранить элементы таблицы после обновления метода записи? - PullRequest
0 голосов
/ 04 ноября 2019

Эта проблема тесно связана с кодом и проблемой, с которой я столкнулся в моем предыдущем посте: Как опубликовать данные таблицы, не обновляя мое представление после удаления записи? .

Iиметь метод CheckOut GET, который создает модель Order и возвращает ее в представление CheckOut. У меня также есть метод CheckOut POST, который обрабатывает модель заказа POST после заполнения дополнительных полей в представлении CheckOut и отправки формы.

Я сталкиваюсь с проблемой, когда ModelState.IsValid == false. Когда это происходит, я возвращаю заказ в окно оформления заказа и отображаю ошибку. Однако если в этот момент я удаляю элементы из таблицы в представлении CheckOut и обновляю страницу, удаленные элементы возвращаются в таблицу.

Этого не произойдет, если я удаляю элементы со своей таблицы и обновляю страницу, прежде чем что-либо отправлено. Причина этого, конечно, в том, что метод CheckOut GET перестраивает модель Order из обновленных таблиц в базе данных.

То, что я пробовал:

  1. Если ModelState.IsValid == false в CheckOut POST, перенаправить на действие CheckOut GET. Это исправило проблему, но добавило новую, где, если форма была заполнена неправильно, представление отображало ошибки формы для пользователя. Я предполагаю, что это потому, что ModelState был очищен.

  2. Еще одно потенциальное решение - перестраивать модель 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 и, в случае обновления страницы, старые элементы все еще находятся в коллекции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...