c# - 提交表单时保留模型属性
问题描述
我试图弄清楚为什么当我返回带有模型的视图时属性值没有持续存在。
索引.cshtml
看法:
@Html.HiddenFor(model => model.IsWtv)
控制器:
[HttpPost]
public ActionResult Index([Bind(Exclude = "Id,ShippingCost")] TestModels model)
{
//assume the initial value is false. I only want it to switch to true once
if (!model.IsWtv)
model.IsWtv = true;
return View(model);
}
模型:
public Boolean IsWtv
{
get;
set;
}
当我重新提交表单时,IsWtv 的值始终为 false。我不明白为什么?
解决方案
首先,在处理控制器操作方法时,您应该真正遵循 PRG 模式(POST、重定向、GET)(除非这是某种类型的 AJAX 请求)。
话虽如此,HtmlHelpers
当您更新和返回模型时,从模型状态而不是模型中获取模型值。为了更新和返回模型,在你的 post 方法中添加这行代码,然后再进行任何属性修改:
ModelState.Clear();
或者您可以在 ModelState 本身中设置 IsWtv 的值:
//no point in doing any check on the actual variable
//we are always returning true
ModelState["IsWtv"].Value = true;
推荐阅读
- c# - 什么是 C# 中的元帅?我在哪里可以找到副本。元帅
- python - 从 Qt 小部件应用程序调用 pyqt 小部件
- fpdf - LARAVEL 5.7 FPDF - 更改 PDF 方向的配置文件不起作用
- angular - 我在 IIS 上托管的 Angular 应用程序的 IE 中没有显示 Favicon
- vim - vim - 如何选择多行?
- react-native - 如何调试未打开的 ReactNative 应用程序
- tcl - 如何在 tcl 脚本中对列表进行分组
- react-native - 无法访问反应导航中的道具
- python - 写入类型错误时:不支持的操作数类型 -: 'float' 和 'str'
- angular - 如何使用拖放在两个不同的网格(Ag-grid Angular 6)之间传输行?