Asp.net mvc 3 将复选框绑定到MVC中的int数组/可枚举 @Html.CheckBox(“订单号”,新的{value=1}) @复选框(“OrderNumber”,新的{value=2}) @复选框(“OrderNumber”,新的{value=3}) @复选框(“OrderNumber”,新的{value=4}) @复选框(“OrderNumber”,新的{value=5}) [HttpPost] 公共操作结果标记已完成(IEnumerable OrderNumber){} [HttpPost] 公共操作结果标记已完成(IEnumerable OrderNumber){}
如果在操作方法中使用第一个签名,则会得到一个空的Asp.net mvc 3 将复选框绑定到MVC中的int数组/可枚举 @Html.CheckBox(“订单号”,新的{value=1}) @复选框(“OrderNumber”,新的{value=2}) @复选框(“OrderNumber”,新的{value=3}) @复选框(“OrderNumber”,新的{value=4}) @复选框(“OrderNumber”,新的{value=5}) [HttpPost] 公共操作结果标记已完成(IEnumerable OrderNumber){} [HttpPost] 公共操作结果标记已完成(IEnumerable OrderNumber){},asp.net-mvc-3,int,ienumerable,checkbox,model-binding,Asp.net Mvc 3,Int,Ienumerable,Checkbox,Model Binding,如果在操作方法中使用第一个签名,则会得到一个空的IEnumerable 如果我使用第二个签名,我确实会收到值,但对于未选择的值,我也会收到一个假值(因为MVCs模式使用隐藏字段隐藏所有复选框) e、 我将收到类似于ordernumber={“1”、“2”、“false”、“4”、“false”} 为什么我不能直接获取数字列表?因为提供的复选框帮助程序就是这样工作的 您必须自己为复选框生成html。然后不会生成隐藏的输入,您将只获得选定的整数值。您可以通过以下方式获得所有选中的值 控制器代码: @
IEnumerable
如果我使用第二个签名,我确实会收到值,但对于未选择的值,我也会收到一个假值(因为MVCs模式使用隐藏字段隐藏所有复选框)
e、 我将收到类似于ordernumber={“1”、“2”、“false”、“4”、“false”}
为什么我不能直接获取数字列表?因为提供的
复选框帮助程序就是这样工作的
您必须自己为复选框生成html。然后不会生成隐藏的输入,您将只获得选定的整数值。您可以通过以下方式获得所有选中的值
控制器代码:
@Html.CheckBox("orderNumbers", new { value = 1 })
@Html.CheckBox("orderNumbers", new { value = 2 })
@Html.CheckBox("orderNumbers", new { value = 3 })
@Html.CheckBox("orderNumbers", new { value = 4 })
@Html.CheckBox("orderNumbers", new { value = 5 })
[HttpPost]
public ActionResult MarkAsCompleted(IEnumerable<int> orderNumbers) { }
[HttpPost]
public ActionResult MarkAsCompleted(IEnumerable<string> orderNumbers) { }
查看代码:
public ActionResult Index()
{
return View();
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(string[] orderNumbers)
{
return View();
}
@使用(Html.BeginForm())
{
}
请记住一件事,您需要为所有复选框指定相同的名称。在数组中,您将获得所有选中复选框的值。除了alok_dida的精彩答案之外。因为所有的值都是整数,所以您可以让控制器代码获取一个整数数组,并避免自己进行转换
这适用于MVC4+:
@using (Html.BeginForm())
{
<input name="orderNumbers" type="checkbox" value="1" />
<input name="orderNumbers" type="checkbox" value="2" />
<input name="orderNumbers" type="checkbox" value="3" />
<input name="orderNumbers" type="checkbox" value="4" />
<input name="orderNumbers" type="checkbox" value="5" />
<input type="submit" name="temp" value="hi" />
}
的确,我当然知道。真是个白痴!我错误地认为,如果他们不能绑定到请求的类型,他们会在模型绑定器中做一些聪明的事情来忽略错误的值。
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(int[] orderNumbers)
{
return View();
}