首页 > 解决方案 > 提交表单时保留模型属性

问题描述

我试图弄清楚为什么当我返回带有模型的视图时属性值没有持续存在。

索引.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。我不明白为什么?

标签: c#asp.net-mvc

解决方案


首先,在处理控制器操作方法时,您应该真正遵循 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;

推荐阅读