模型的 Hidden bool 字段在控制器中设置为 True 后仍然为 False
The model's Hidden bool field remains False after it was set True in the controller
我的 ViewModel 中有这个 属性 class:
public bool AreSimilarEntitiesChecked { get; set; }
在我的控制器中,我设置了它的值 'true' 和 return 带有模型的视图:
model.AreSimilarEntitiesChecked = true;
return View(model).WithWarning("Check the similar mentors before saving!");
在我的视图中有一个表格,我在其中放置了这个 属性:
的隐藏字段
@Html.HiddenFor(m => m.AreSimilarEntitiesChecked)
在使用包含 AreSimilarEntitiesChecked 的模型编辑视图 return 之后,尽管我在控制器中设置了 True 值,但其值仍然为 False。
我不知道它有什么问题。
生成 HTML:
<input name="AreSimilarEntitiesChecked" id="AreSimilarEntitiesChecked"
type="hidden" value="False" data-val-required="The AreSimilarEntitiesChecked
field is required." data-val="true">
我不能确定这是你问题的问题,但我敢打赌它是...
MVC 的 ModelState
,保留视图模型数据的表示,优先从 POST 数据中提取值,而不是从绑定模型中获取它们。也就是说,如果 HTTP POST 包含一个名为(不区分大小写)AreSimilarEntitiesChecked
且值为 False
的字段,那么您将 属性 设置为什么并不重要渲染视图时的视图模型。 ModelState
将更喜欢 POSTed 值而不是 viewmodel 值。
出现这种奇怪行为的原因是,假设您有一个字段,用户应该在其中输入一个整数,但他们却写成了 "banana"。这被发送到服务器进行验证,但验证失败。我们想再次呈现视图,"banana" 仍在字段中,并显示一条消息,表明它不是整数。但是,如果视图优先呈现视图模型的数据,那将是不可能的,因为 "banana" 不是整数,不能放在该视图模型字段中。因此 POST 值被保留。
有两种解决方法。您可以专门针对此字段进行修复:
ModelState.Remove("AreSimilarEntitiesChecked");
或核选项:
ModelState.Clear();
我的 ViewModel 中有这个 属性 class:
public bool AreSimilarEntitiesChecked { get; set; }
在我的控制器中,我设置了它的值 'true' 和 return 带有模型的视图:
model.AreSimilarEntitiesChecked = true;
return View(model).WithWarning("Check the similar mentors before saving!");
在我的视图中有一个表格,我在其中放置了这个 属性:
的隐藏字段@Html.HiddenFor(m => m.AreSimilarEntitiesChecked)
在使用包含 AreSimilarEntitiesChecked 的模型编辑视图 return 之后,尽管我在控制器中设置了 True 值,但其值仍然为 False。
我不知道它有什么问题。
生成 HTML:
<input name="AreSimilarEntitiesChecked" id="AreSimilarEntitiesChecked"
type="hidden" value="False" data-val-required="The AreSimilarEntitiesChecked
field is required." data-val="true">
我不能确定这是你问题的问题,但我敢打赌它是...
MVC 的 ModelState
,保留视图模型数据的表示,优先从 POST 数据中提取值,而不是从绑定模型中获取它们。也就是说,如果 HTTP POST 包含一个名为(不区分大小写)AreSimilarEntitiesChecked
且值为 False
的字段,那么您将 属性 设置为什么并不重要渲染视图时的视图模型。 ModelState
将更喜欢 POSTed 值而不是 viewmodel 值。
出现这种奇怪行为的原因是,假设您有一个字段,用户应该在其中输入一个整数,但他们却写成了 "banana"。这被发送到服务器进行验证,但验证失败。我们想再次呈现视图,"banana" 仍在字段中,并显示一条消息,表明它不是整数。但是,如果视图优先呈现视图模型的数据,那将是不可能的,因为 "banana" 不是整数,不能放在该视图模型字段中。因此 POST 值被保留。
有两种解决方法。您可以专门针对此字段进行修复:
ModelState.Remove("AreSimilarEntitiesChecked");
或核选项:
ModelState.Clear();