Asp.net mvc 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 {
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模式并重定向到显示新视图的方法