Kendo ASP.NET MVC - Index out of range of data binding

I get the following error when trying to bind datatable to Telerik Kendo grid:

The index was out of range. Must be non-negative and smaller than the size of the collection.

I followed the draft Telerik example project, but in my code it seems to fail in the Read function of the DataSource:

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

I have an ActionResult Read () currently returning null, simply because I would like to see if it can even jump to this function. In addition, I went through and the returned datatable returns the correct column and column names.

Any help is appreciated.

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; } } 

UPDATE ::

Here is a stack trace, I'm not sure if this will help.

  [ArgumentOutOfRangeException: Index was out of range.  Must be non-negative and less than the size of the collection.
     Parameter name: index]
      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 writer, WebPageRenderingBase startPage) +76
    System.Web.Mvc.RazorView.RenderView (ViewContext viewContext, TextWriter writer, Object instance) +260
    System.Web.Mvc.BuildManagerCompiledView.Render (ViewContext viewContext, TextWriter writer) +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 filters, 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
+7
source share
3 answers

Turns out this is due to my web.config. I ran into errors with every Kendo object I created. Adding the following code to the top level of web.config seemed to fix everything.

 <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> 
+10
source

By including a section in your solution, the web.config file will help you.

 <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> 
+4
source

I would suggest that an error occurs because the Read action does not return a valid result set.

Typically, a Kendo grid requires a JsonResult return when reading in Ajax mode. If you return an empty DataTable correctly formatted as the result of json, I suspect it will fix it.

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

Obviously, you should substitute a DataTable for your real result set.

0
source

All Articles