C# 使用asp.net mvc3 plus批量更新中的复选框

C# 使用asp.net mvc3 plus批量更新中的复选框,c#,asp.net,asp.net-mvc-3,entity-framework,C#,Asp.net,Asp.net Mvc 3,Entity Framework,目前,我正试图创建一个基于一系列复选框的大规模更新。我似乎找不到使用实体框架的正确方法 我正在使用ASP.NET4与MVC3和Razor 这是我到目前为止的代码 查看页面(工作正常) 错误 索引超出范围。必须为非负数且小于集合的大小。 参数名称:索引 问题: 如何正确循环控制器中的复选框?一旦我达到这一点,我的大规模更新代码会起作用吗 提前谢谢。我想这句话 fcMain[counter].Contains("true") 正在导致错误。在向视图提供模型时,是否使用某种约束选择(其中) 此外,您

目前,我正试图创建一个基于一系列复选框的大规模更新。我似乎找不到使用实体框架的正确方法

我正在使用ASP.NET4与MVC3和Razor

这是我到目前为止的代码

查看页面(工作正常) 错误 索引超出范围。必须为非负数且小于集合的大小。 参数名称:索引

问题: 如何正确循环控制器中的复选框?一旦我达到这一点,我的大规模更新代码会起作用吗

提前谢谢。

我想这句话

fcMain[counter].Contains("true")
正在导致错误。在向视图提供模型时,是否使用某种约束选择(
其中


此外,您还应该通过执行以下操作在每个复选框后添加隐藏字段

<input type="hidden" value="false" id="@item.id" name="@item.id"/>


这里的问题是,只有选中的复选框才会发布到服务器。因此,您不能期望所有复选框键都出现在表单集合中。要解决此问题,请使用复选框创建一个附加的隐藏字段,以便在服务器端读取结果。我不确定您将如何在这里使用强类型助手,因为您正在循环中呈现数据。我想你可以看看这个

忽略任何其他问题,现在你的
fcMain[counter]
集合是基于0的,但是你的索引/计数器是从1开始的。这意味着您将跑过最后一个条目。如果多个用户使用该站点,那么假设您的数据收集长度与复选框数相同当然是危险的。我确实将其更改为零,但结果相同。您是否调试了代码行,并查看了多少条条目和多少个控件?使用未经测试的索引直接索引到
fcMain
是最有可能的失败点。能否比较表单集合的计数与模型集合的计数。。尽管问题仍然存在,您是否仍在使用IEThanks提供改进建议:(
fcMain[counter].Contains("true")
<input type="hidden" value="false" id="@item.id" name="@item.id"/>
if (item.isFree == true)
{
   <input type="checkbox" id="@item.id"  checked="checked" /> @Html.DisplayFor(modelItem => item.displayName)  
}
else
{
   <input type="checkbox" id="@item.id" /> @Html.DisplayFor(modelItem => item.displayName)
}
<input type="checkbox" id="@item.id" name="@item.id" @(!Item.isFree?"checked=\"checked\":\"\"") /> @Html.DisplayFor(modelItem => item.displayName)
_db.champions.Attach(champ);
_db.ObjectStateManager.ChangeObjectState(champ, EntityState.Modified);