【问题标题】:Bool from viewmodel is not binding in MVC action on a post来自 viewmodel 的 Bool 在帖子的 MVC 操作中没有绑定
【发布时间】:2014-03-31 19:59:05
【问题描述】:

我有一个具有TestStrTestBool 作为属性的视图模型。如果我提交表单,只有TestStr 值被设置为绑定视图模型,而不是TestBoolTestBool 的表单集合中的值设置为 "on",这是问题所在吗?是否应该将其设置为true 才能将其标记为true?

我的 c# 视图模型:

public class MyViewModel { 
  public bool TestStr { get; set; }
  public bool TestBool { get; set; }
}

我的剃刀视图,在表单内:

<input name="TestStr" value="this is getting set in my MVC action" />
<input name="TestBool" checked=checked /> // this always gets set to false, even tho it's checked

我的 MVC 操作:

public ActionResult(MyViewModel vm) {
  // vm.TestBool is always false
}

我注意到,如果我使用@Html.CheckBoxFor(...),它会在我的 MVC 操作中正确绑定它。是否可以使用输入的 html 来执行此操作?只是因为我有一些正在使用的集合,所以我必须为每个集合提供输入名称。

【问题讨论】:

标签: c# asp.net-mvc formcollection


【解决方案1】:

这是因为如果未选中复选框,它们不会回发。 HTML 助手实际上为未选中的版本添加了一个隐藏字段,然后正确地解决了冲突(选中/未选中)。

如果您想保留其他字段,但不想显示它们,可以使用Html.HiddenFor 来保留值。

此帖子显示某人使用same issue

【讨论】:

  • 但是,选中的复选框被回发,但值为“on”而不是“true”。
  • 这是设计使然。他们总是以 on 回发,这是 HTML 规范的一部分。 ModelBinder 知道这一点,因此它会为您将“on”转换为 true。
猜你喜欢
  • 1970-01-01
  • 2018-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-20
  • 2023-03-31
相关资源
最近更新 更多