我有一个使用几个Infragistics jQuery igGrid小部件的MVC4应用程序。直到周三早上,这个应用程序工作得非常好。然后我备份了项目,并在新机器上恢复了它。我也重新安装了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
部分。最后一个属性的存在会触发网格故障。
答案 0 :(得分:1)
你说
`I then backed up the project, and restored it on a new machine.`
但是,据我所知,用于加密和解密密码值的MachineKey值是特定于原始机器的。因此,将代码从一台计算机移动到另一台计算机时,MachineKey会有所不同,您无法解密配置文件。我认为你需要重新加密新机器上的连接字符串。这将使用本地加密密钥。
也许this article可能会有所帮助。
答案 1 :(得分:0)
可能Items集合是空的。
尝试将Model.Items
对象用作网格数据源,而不是Model.Items.AsQueryable()
。