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个值。请帮助。
答案 0 :(得分:1)
@Html.CheckBox()
和@Html.CheckBoxFor()
辅助方法生成2个输入,一个复选框和一个隐藏输入
<input type="checkbox" name="yourPropertyName" .... value="true" >
<input type="hidden" name="yourPropertyName" value="false" >
这是设计原因,因为未选中的复选框不会发布值。如果选中,则会提交yourPropertyName=true&yourPropertyName=false
。 DefaultModelBinder
读取第一个值(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;