我的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,但仍然没有形成积极的结果。
与此相关的大多数档案在这种情况下没有帮助,因为它们的复选框中包含值。
答案 0 :(得分:4)
id
属性不会选择表单输入,而是name
属性。
将输入更改为:
<input type="checkbox" name="chb_Active" ...
将允许将数据发布回控制器。您还应根据Ben Griffiths' answer添加value
属性和隐藏输入。
更多MVC-y方法是使用View Models。
创建一个文件夹/ViewModels/ControllerName
并在其中放置一个类(它实际上不必在此文件夹中,但是遵循惯例后跟视图很好):
public class MethodNameViewModel
{
public bool Active { get; set; }
public bool Inactive { get; set; }
}
在视图中,您现在可以
@model ProjectName.ViewModels.ControllerName.MethodNameViewModel
<div class="row" style="width: 98%;">
<div class="col-md-1" style="width: 22%;">
@Html.DisplayNameFor(x => x.Active)
</div>
<div class="col-md-1" style="width: 23%;">
@Html.EditorFor(x => x.Active, new { style = "color: #428bca" })
</div>
@* Same for other field *@
然后您的帖子操作变为:
[HttpPost]
public ActionResult MethodName(MethodNameViewModel methodNameViewModel)
{
var active = methodNameViewModel.Active;
var inactive = methodNameViewModel.Inactive
// ... etc
}
答案 1 :(得分:3)
这里有两个问题:
首先,您的HTML输入需要name
属性 - 而不仅仅是id
- 因为它是用作表单集合中键的名称。
其次,他们需要一个价值。这比较复杂,并且是复选框的一个古老问题。默认情况下,如果选中了复选框,浏览器将提交与复选框关联的值,如果未选中,则不会提交任何内容。因此,为了在复选框中提交true
复选框,并在未选中时false
,您需要执行以下操作:
<input type="checkbox" ID="chb_Active" name="chb_Active" value="true" style="color: #428bca;">
<input type="hidden" name="chb_Active" value="false">
(类似于你的另一个复选框,如果你想要其中两个)。
如果未选中此复选框,则使用此设置,false
将作为表单的chb_Active
属性的值发回。如果 被选中,则false
和true
都将被回发,如果您使用其模型,ASP.NET将自动为您选择true
绑定功能,如下所示:
public ActionResult MethodName(string submit, bool chb_Active) {
// ...
}