我有一个使用多个 Infragistics jQuery igGrid 小部件的 MVC4 应用程序。直到周三早上,这个应用程序运行得非常好。然后我备份了这个项目,并在一台新机器上恢复了它。我还重新安装了 while Infragistics jQuery 套件,尽管这不是必需的,因为没有 GAC 依赖项。
现在,在我的应用程序的任何网格上,我得到一个“索引超出范围。必须是非负数并且小于集合的大小。” 当网格尝试在定义网格的 Razor 标记行上呈现时出现异常。堆栈跟踪是:
at System.ThrowHelper.ThrowArgumentOutOfRangeException()
at System.Collections.ObjectModel.Collection`1.set_Item(Int32 index, T value)
at Infragistics.Web.Mvc.GridModel.DataBindInternal()
at Infragistics.Web.Mvc.GridModel.DataBind()
at Infragistics.Web.Mvc.Grid`1.DataBind()
at ASP._Page_Areas_Author_Views_Course_Index_cshtml.Execute() in c:\Development\Educ8\Educ8.Mvc\Areas\Author\Views\Course\Index.cshtml:line 16
这对应用程序中的每个网格都很常见,并不是因为数据源已更改并且缺少列或其他原因。一个示例网格定义是:
<section class="index">
@{
var grid = Html.Infragistics().Grid(Model.Items.AsQueryable())
.ID("indexGrid")
.AutoGenerateColumns(false)
.PrimaryKey("Id")
.Height(Model.GridHeight)
.Columns(col =>
{
col.For(m => m.Id).HeaderText("Id").Hidden(true);
}).DataBind();
}
@grid.Render()
</section>
在这里,我删除了除 Id 之外的所有列,我已确认它存在于数据源中。
更多:
回顾我的 Git 提交,我发现当我在 web.config 中加密我的连接字符串时出现了这个问题。加密代码将configProtectionProvider="DataProtectionConfigurationProvider"
属性添加到该connectionStrings
部分。编辑抱怨这个属性是不允许的,所以我把这个xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"
属性添加到了这个configuration
部分。正是这最后一个属性的存在触发了电网故障。