MVC中选中的复选框值

时间:2015-07-03 18:19:21

标签: c# .net asp.net-mvc

HTML Helper类

@Html.CheckBox("Checkbox1", false)
@Html.CheckBox("Checkbox1", false)
@Html.CheckBox("Checkbox1", true)

控制器:

    [HttpPost]
    public ActionResult Index(string[] Checkbox1)
    {
        return View();
    }

如何在Controller中获取所选的复选框值?在这里,我将获取所有复选框值以及所选值。假设,如果我选择了2个复选框,我得到3 + 2 = 5个值。请帮助。

2 个答案:

答案 0 :(得分:1)

@Html.CheckBox()@Html.CheckBoxFor()辅助方法生成2个输入,一个复选框和一个隐藏输入

<input type="checkbox" name="yourPropertyName" .... value="true" >
<input type="hidden" name="yourPropertyName" value="false" >

这是设计原因,因为未选中的复选框不会发布值。如果选中,则会提交yourPropertyName=true&yourPropertyName=falseDefaultModelBinder读取第一个值(true)并忽略第二个值(因此属性设置为true)。如果未选中,则仅提交yourPropertyName=false,并将该属性设置为false

通过创建具有相同名称的3个输入很难理解您要实现的目标,并且您声称获得5个值的事实意味着您使用FormCollection来读取值(选中了2个复选框)一个不是)。你永远不应该使用FormCollection

使用视图模型和强类型html帮助程序生成视图,并回发模型。例如

public class MyModel
{
  public bool Property1 { get; set; }
  public bool Property2 { get; set; }
  ....
}

并在视图中

@model MyModel
....
@Html.CheckBoxFor(m => m.Property1)
@Html.CheckBoxFor(m => m.Property2)
....

或者,如果您想要一组boolean属性

public class MyModel
{
  public List<bool> MyProperty { get; set; }
  ....
}

并在视图中

for(int i = 0; i < Model.MyProperty.Count; i++)
{
  @Html.CheckBoxFor(m => m.MyProperty[i])
}

然后在控制器中

public ActionResult Edit(MyModel model)
{
  // model will be correctly bound with the values of the boolean properties
}

答案 1 :(得分:0)

您需要为复选框设置不同的值。您能否为使用此复选框集合提供更多上下文?

也许您可以为每个人命名,并执行以下操作?

string checkboxValue1 = Request["Checkbox1"].ToString();
string checkboxValue2 = Request["Checkbox2"].ToString();
string checkboxValue3 = Request["Checkbox3"].ToString();

bool checkboxStatus1 = false;
bool checkboxStatus2 = false;
bool checkboxStatus3 = false;


if (checkboxValue1 == "true,false")
    checkboxStatus1 = true; 

if (checkboxValue2 == "true,false")
    checkboxStatus2 = true; 

if (checkboxValue3 == "true,false")
    checkboxStatus3 = true;