模型 属性 值未从剃须刀中的 html 复选框更改

Model property value is not changing from html checkbox in razor

剃须刀代码-

@model SkyTracker.Models.Person

<form method="post" action="Edit">
     @Html.CheckBoxFor(m=> m.IsActive, new {@Value=Model.IsActive })
     <input type="submit" value="Update"/>
</form>

控制器代码-

[HttpPost]
public ActionResult Edit(Person person)
{
   var status = person.IsActive; //its always false.
}

无论复选框是否选中,模型 属性 始终保持为 false。

我在这里错过了什么?

你不应该那样做:

 @Html.CheckBoxFor(m=> m.IsActive, new {@Value=Model.IsActive })

正确的方法是:

 @Html.CheckBoxFor(m=> m.IsActive)

asp.net mvc 会自动将其标记为 checked/unchecked 取决于模型值

但是它也会相应地设置模型吗?我目前有同样的问题,无论是否选中,我的模型值始终为真:

型号:

   [DisplayName("AdBlue")]
    public Boolean AdBlue { get; set; } 

查看:

    @model Contract.CreateViewModel
    ...

  @Html.CheckBoxFor(model => model.AdBlue, new { onChange = "GetMasterData()" })

当GetMasterData函数被触发时(定义在外部JS文件中,它会这样做:

var AdBlueSelector = document.getElementById("AdBlue").value;

但是 document.getElementById("AdBlue").value 的值始终为真,即使未选中该复选框也是如此。我的代码有什么问题?

当我向视图添加隐藏字段时,该值始终为真:

<input type="hidden" asp-for="AdBlue" />

编辑:哎呀,我刚发现错误:

document.getElementById("AdBlue").value 

必须更改为

document.getElementById("AdBlue").checked;