我的MVC视图中的表单内有一个复选框,如下所示:
<div class="row" style="width: 98%;">
<div class="col-md-1" style="width: 22%;">Active</div>
<div class="col-md-1" style="width: 23%;">
<input type="checkbox" ID="chb_Active" style="color: #428bca;">
</div>
<div class="col-md-1" style="width: 22%;">Inactive</div>
<div class="col-md-1" style="width: 23%;">
<input type="checkbox" ID="chb_Inactive" style="color: #428bca;">
</div>
<div class="col-md-1" style="width: 20%;"></div>
</div>
在我的控制器上,ActionResult方法如下所示 .
public ActionResult MethodName(string submit, FormCollection collection)
{
bool chb_Active = Convert.ToBoolean(collection["chb_Active"]);
bool chb_Inactive = Convert.ToBoolean(collection["chb_Inactive"]);
//Some other operations
//The return view
}
这就是我处理所有其他控件(如下拉列表)的方法,它可以正常工作并获取所选值 .
复选框值出现问题,即使您检查或取消选中它们,它们也始终设置为False,它们始终返回False .
我是MVC的新手,请帮助或指出我正确的方向 . 我试过没有FormCollection,形式仍然没有积极的结果 .
与此相关的大多数档案在这种情况下没有帮助,因为它们的复选框中包含值 .
2 回答
这里有两个问题:
首先,您的HTML输入需要
name
属性 - 而不仅仅是id
- 因为它是用作表单集合中的键的名称 .其次,他们需要一个 Value . 这比较复杂,并且是复选框的一个古老问题 . 默认情况下,如果选中了复选框,浏览器将提交与复选框关联的值,如果未选中,则不会提交任何内容 . 因此,为了使复选框在选中时提交
true
并且在未选中时false
,您需要这样做:(同样,对于你的其他复选框,如果你想要两个) .
使用此设置,如果未选中复选框,
false
将作为表单的chb_Active
属性的值回发 . 如果选中它,则会回发false
和true
,如果您使用其模型绑定功能,ASP.NET将自动为您选择true
,如下所示:表单输入不会在
id
属性上获取,而是name
属性 .将输入更改为:
将允许数据回发到控制器 . 您还应该根据Ben Griffiths' answer添加
value
属性和隐藏输入 .更好的方法
MVC-y的方法越多,就是使用View Models .
创建一个文件夹
/ViewModels/ControllerName
并在其中放置一个类(它不符合惯例,遵循视图):在视图中你现在可以做到
然后您的帖子操作变为: