7

データテーブルをTelerikKendoGridにバインドしようとすると、次のエラーが発生します。

インデックスが範囲外でした。負ではなく、コレクションのサイズよりも小さい必要があります。

Telerikのサンプルプロジェクトに従いましたが、私のコードでは、「DataSource」の「Read」関数で失敗しているようです。

.Read(read => read.Action( "Read"、 "Events"))

ActionResult Read()が現在nullを返しているのは、それがその関数に到達するかどうかを確認したかったからです。また、ステップスルーしたところ、データテーブルは正しい列と列名を返しています。

どんな助けでも大歓迎です。

Events.cshtml

@model System.Data.DataTable

@{
    ViewBag.Title = "Events";
    Layout = "~/Views/_mainLayout.cshtml";
}

<p>Events</p>

@(Html.Kendo().Grid(Model)
    .Name("GridStatic")
    .Columns(columns =>
    {
        columns.Bound("ID");
        columns.Bound("EntryType");
        columns.Bound("EventDate");
        columns.Bound("EventData");
        columns.Bound("Source");
    })
    .Pageable()
    .Sortable()
    .Scrollable()
    .Filterable()
    .DataSource(dataSource => dataSource
        .Ajax()       
        .Model(model =>
            {
                model.Field("ID", typeof(int));
                model.Field("EntryType", typeof(DateTime));
                model.Field("EventDate", typeof(string));
                model.Field("EventData", typeof(string));
                model.Field("Source", typeof(string));
            })
        .Read(read => read.Action("Read", "Events"))
    )
)

EventsController.cs

public class EventsController : Controller
{
    //
    // GET: /Events/

    public ActionResult Events(string sName)
    {
        EventReader ereader = new EventReader(sName);
        return View(ereader.ParseIntoTable(ereader.GetListOfEvents()));
    }

    public ActionResult Read([DataSourceRequest] DataSourceRequest request)
    {
        return null;
    }
}

アップデート::

これがスタックトレースです。それが役立つかどうかはわかりません。

    [ArgumentOutOfRangeException:インデックスが範囲外でした。負ではなく、コレクションのサイズよりも小さい必要があります。
    パラメータ名:インデックス]
     System.ThrowHelper.ThrowArgumentOutOfRangeException()+72
   System.Collections.ObjectModel.Collection`1.set_Item(Int32 index、T value)+10451574
   System.Web.Mvc.ControllerContext.get_RequestContext()+25
   Kendo.Mvc.UI.NavigatableExtensions.GenerateUrl(INavigatable navigatable、ViewContext viewContext、IUrlGenerator urlGenerator)+52
   Kendo.Mvc.UI.Fluent.CrudOperationBuilder.SetUrl()+81
   Kendo.Mvc.UI.Fluent.CrudOperationBuilder.Action(String actionName、String controllerName、Object routeValues)+66
   Kendo.Mvc.UI.Fluent.CrudOperationBuilder.Action(String actionName、String controllerName)+47
   ASP._Page_Views_Events_Events_cshtml.b__3(CrudOperationBuilder read)in c:\ Users \ wsharp \ Documents \ Visual Studio 2010 \ Projects \ Inviso \ Inviso \ Views \ Events \ Events.cshtml:40
   Kendo.Mvc.UI.Fluent.AjaxDataSourceBuilderBase`2.Read(Action`1 configurator)+131
   ASP._Page_Views_Events_Events_cshtml.b__2(DataSourceBuilder`1 dataSource)in c:\ Users \ wsharp \ Documents \ Visual Studio 2010 \ Projects \ Inviso \ Inviso \ Views \ Events \ Events.cshtml:30
   Kendo.Mvc.UI.Fluent.GridBuilder`1.DataSource(Action`1 configurator)+212
   ASP._Page_Views_Events_Events_cshtml.Execute()in c:\ Users \ wsharp \ Documents \ Visual Studio 2010 \ Projects \ Inviso \ Inviso \ Views \ Events \ Events.cshtml:16
   System.Web.WebPages.WebPageBase.ExecutePageHierarchy()+197
   System.Web.Mvc.WebViewPage.ExecutePageHierarchy()+97
   System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext、TextWriterライター、WebPageRenderingBase startPage)+76
   System.Web.Mvc.RazorView.RenderView(ViewContext viewContext、TextWriterライター、オブジェクトインスタンス)+260
   System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext、TextWriterライター)+115
   System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)+295
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext、ActionResult actionResult)+13
   System.Web.Mvc.c__DisplayClass1a.b__17()+23
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter、ResultExecutingContext preContext、Func`1 continuation)+242
   System.Web.Mvc.c__DisplayClass1c.b__19()+21
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext、IList`1フィルター、ActionResult actionResult)+177
   System.Web.Mvc.Async.c__DisplayClass2a.b__20()+89
   System.Web.Mvc.Async.c__DisplayClass25.b__22(IAsyncResult asyncResult)+102
   System.Web.Mvc.Async.WrappedAsyncResult`1.End()+57
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult)+43
   System.Web.Mvc.c__DisplayClass1d.b__18(IAsyncResult asyncResult)+14
   System.Web.Mvc.Async.c__DisplayClass4.b__3(IAsyncResult ar)+23
   System.Web.Mvc.Async.WrappedAsyncResult`1.End()+62
   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult)+57
   System.Web.Mvc.Async.c__DisplayClass4.b__3(IAsyncResult ar)+23
   System.Web.Mvc.Async.WrappedAsyncResult`1.End()+62
   System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult)+47
   System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult)+10
   System.Web.Mvc.c__DisplayClass8.b__3(IAsyncResult asyncResult)+25
   System.Web.Mvc.Async.c__DisplayClass4.b__3(IAsyncResult ar)+23
   System.Web.Mvc.Async.WrappedAsyncResult`1.End()+62
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)+47
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)+9
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+9629296
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step、Boolean&completedSynchronously)+155
4

3 に答える 3

10

それは私のweb.configに関連していたことがわかりました。作成したすべての剣道オブジェクトでエラーが発生していました。次のコードをトップレベルのweb.configに追加すると、すべてが修正されたようです。

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
      <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>
于 2013-03-14T04:29:16.367 に答える
4

ソリューションのweb.configファイルにセクションを含めると役立ちます。

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
        </dependentAssembly>
    </assemblyBinding>
</runtime>
于 2013-08-18T06:34:50.537 に答える
0

Readアクションが有効な結果セットを返さないため、エラーが発生していると推測されます。

通常、Kendoグリッドでは、JsonResultAjaxモードで読み取るときにを返す必要があります。DataTablejsonの結果として正しくフォーマットされた空を返す場合は、それで修正されると思います。

  public ActionResult Read([DataSourceRequest] DataSourceRequest request)
  {
     return this.Json(new DataTable().ToDataSourceResult(request));
  }

明らかにDataTable、実際の結果セットの代わりにを使用する必要があります。

于 2013-03-13T14:08:40.870 に答える