複数の 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
グリッドで障害を引き起こすのは、この最後の属性の存在です。