此问题与我的旧帖子How to post table data without refreshing my view after removing a record?中的代码和问题密切相关。
我有一个CheckOut GET方法,该方法将构建一个Order模型并将其返回到CheckOut视图。在填写CheckOut视图中的其他字段并提交表单之后,我还有一个CheckOut POST方法来处理POSTed Order模型。
当ModelState.IsValid == false时,我遇到了问题。发生这种情况时,我将Order返回到结帐视图并显示错误。但是,如果此时我从CheckOut视图中的表中删除了项目并刷新了页面,则我删除的项目将返回到表中。
如果我从表中删除项目并刷新页面,然后再发布任何内容,则不会发生这种情况。原因当然是因为CheckOut GET方法从数据库中更新的表中重建了Order模型。
我尝试过的事情:
-
如果CheckOut POST中的ModelState.IsValid == false,则重定向到CheckOut GET操作。这解决了问题,但是引入了一个新的问题,即如果表单填写不正确,则视图会向用户显示表单错误。我猜这是因为ModelState已清除。
-
另一种可能的解决方案是每次我发布CheckOut视图时都重新构建Order模型。但是,我不想再次重建订单。我已经在GET方法中做到了。
CheckOut GET方法:
[HttpGet]
public IactionResult CheckOut(string Id)
{
Order order = new Order();
order.CartId = Id;
//populate order object's parameters
return View(order);
}
CheckOut POST方法
[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 });
}
我的结帐视图:https://i.imgur.com/gbl3kSH.png 如果我要从表中删除一个项目并刷新视图而不重新发布它,则将运行CheckOut POST方法,并且该项目将返回到表中。我希望表格在刷新时不包含该项目。
编辑:我将formcollection集合放在HttpPost中,并且在刷新页面的情况下,旧项目仍在集合中。