Asp.net mvc MVC核心-奇怪的视图渲染问题

Asp.net mvc MVC核心-奇怪的视图渲染问题,asp.net-mvc,asp.net-core-mvc,Asp.net Mvc,Asp.net Core Mvc,我使用MVC在视图中显示一个简单表单: 视图模型: public class CreateSaleViewModel { public string OrderId { get; set; } public decimal TotalAmount { get; set; } public bool ShowInstoreConfirmDetails { get; set; } } public class ConfirmDetailsViewModel {

我使用MVC在视图中显示一个简单表单:

视图模型:

public class CreateSaleViewModel
{
    public string OrderId { get; set; }

    public decimal TotalAmount { get; set; }

    public bool ShowInstoreConfirmDetails { get; set; }
}
public class ConfirmDetailsViewModel
{
    public string OrderId { get; set; }

    public decimal TotalAmount { get; set; }

    public string ConfirmOrderId { get; set; }

    public decimal ConfirmTotalAmount { get; set; }
}
控制器操作:

[HttpGet]
public IActionResult CreateSale()
{
    return View(new CreateSaleViewModel());
}
视图:

控制器:

[HttpPost("Confirmdetails")]
public IActionResult ConfirmDetails(CreateSaleViewModel model)
{
 var viewModel = new ConfirmDetailsViewModel
 {
    ConfirmOrderId = model.OrderId,
    ConfirmTotalAmount = model.TotalAmount,
    OrderId = string.Empty,
    TotalAmount = 0.0m
  };

  return View("ConfirmDetails", viewModel);
}
    [HttpPost]
    public IActionResult ConfirmDetails(CreateSaleViewModel model)
    {
        var viewModel = new ConfirmDetailsViewModel
        {
            ConfirmOrderId = model.OrderId,
            ...
        };

        ModelState.Clear();        // force asp-helpers to use the updated model's values

        return View("ConfirmDetails", viewModel);
    }
视图:

@model ConfirmDetailsViewModel
按钮
我的问题是confirmdetails视图orderId和TotalAmount保留了上一页中发布的值

我已经调试了控制器,可以看到ConfirmOrderId和ConfirmTotalAmount属性具有正确的值,OrderId和TotalAmount分别为空strign和0

更奇怪的是

<input type="hidden" value="@Model.OrderId" id="banana" />

具有正确的“”值


有人知道是什么导致了此问题吗?

MVC将回发的值存储在中

这些值默认情况下在@Html helpers中使用-作为一种方便。这允许通过回发保留隐藏表单字段的值,即使它们在视图模型中没有属性

不幸的是,如果您试图在动作中修改模型的属性,通常是一种方便的做法就会变成一件令人头痛的事情帮助程序从ModelState获取其值,忽略更新的视图模型。

要解决此问题,请致电

  • 从ModelState中删除所有回发的值
  • 助手现在将使用视图模型中的值
控制器:

[HttpPost("Confirmdetails")]
public IActionResult ConfirmDetails(CreateSaleViewModel model)
{
 var viewModel = new ConfirmDetailsViewModel
 {
    ConfirmOrderId = model.OrderId,
    ConfirmTotalAmount = model.TotalAmount,
    OrderId = string.Empty,
    TotalAmount = 0.0m
  };

  return View("ConfirmDetails", viewModel);
}
    [HttpPost]
    public IActionResult ConfirmDetails(CreateSaleViewModel model)
    {
        var viewModel = new ConfirmDetailsViewModel
        {
            ConfirmOrderId = model.OrderId,
            ...
        };

        ModelState.Clear();        // force asp-helpers to use the updated model's values

        return View("ConfirmDetails", viewModel);
    }

使用asp for的输入正在创建具有正确名称属性的输入元素以供提交。所有手写隐藏输入都没有名称属性。表单提交基于名称属性,而不是id。请添加与您尝试发布的属性名称匹配的名称属性。或者使用正确的标签助手谢谢,这是一个很好的观点。我现在并不太关心表单的提交,我需要解决的是视图的呈现和错误值的意外绑定,这个问题与
ModelState
有关(请参阅解释)。但是正在生成一个新视图,所以不要返回视图-遵循PRG模式并重定向到显示新视图的方法