0

我有一个使用多个 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部分。正是这最后一个属性的存在触发了电网故障。

4

2 回答 2

1

你说

`I then backed up the project, and restored it on a new machine.`

但是,据我所知,用于加密和解密密码值的 MachineKey 值特定于原始机器。因此,当您将代码从一台机器移动到另一台机器时,MachineKey 是不同的,您无法解密配置文件。我认为您需要重新加密新机器上的连接字符串。这将使用本地加密密钥。

也许这篇文章可能会有所帮助。

于 2012-10-07T08:44:34.550 回答
0

可能 Items 集合为空。

尝试使用该Model.Items对象作为网格数据源,而不是Model.Items.AsQueryable().

于 2012-10-06T16:49:56.943 回答