什么可能导致我的所有Infragistics jQuery网格在新的开发机器上中断?

时间:2012-10-06 12:59:52

标签: asp.net-mvc asp.net-mvc-4 infragistics

我有一个使用几个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部分。最后一个属性的存在会触发网格故障。

2 个答案:

答案 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()