2013-03-13 5 views
7

जब एक Telerik केंडो ग्रिड को एक datatable बाध्य करने के लिए कोशिश कर रहा निम्न त्रुटि हो रही है:केंडो ASP.NET MVC - सीमा के सूचकांक आउट Databinding

सूचकांक सीमा से बाहर किया गया था। गैर-नकारात्मक और संग्रह के आकार से कम होना चाहिए।

मैं Telerik का उदाहरण परियोजना का पालन किया है, लेकिन मेरे कोड में यह डेटा स्रोत 'के' पढ़ें 'समारोह पर विफल रहने के किया जा रहा है:

.Read (पढ़ => read.Action ("पढ़ें "," घटनाक्रम "))

मेरे पास ActionResult Read() वर्तमान में शून्य पर वापस आ रहा है, सिर्फ इसलिए कि मैं देखना चाहता था कि यह उस समारोह में भी होगा या नहीं। साथ ही, मैंने कदम बढ़ाया है और डेटाटेबल सही कॉलम और कॉलम नाम लौट रहा है।

किसी भी मदद की सराहना की जाती है।

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: 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 
+0

यदि आप एक खाली परिणाम सेट वापस करते हैं, तो क्या यह काम करता है ??? –

+0

@BrianMains - मैंने इसे एक खाली डेटा तालिका वापस करने के लिए सेट किया है, लेकिन एक ही त्रुटि मिली है। – fortune

उत्तर

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> 
+1

त्रुटि के संभावित कारणों में से एक यह है कि System.Web.Mvc का 4.0 संस्करण से पुराना लोड किया जा सकता है यदि आपकी प्रोजेक्ट एक 'विरासत' प्रोजेक्ट है जिसे आपने केंडो यूआई जोड़ा है। जब सर्वर से डेटा वापस किया जाता है, तो प्रारूप अपरिचित है और त्रुटि का कारण बनता है। इसे शीर्ष स्तर web.config में जोड़कर आप नवीनतम संस्करण को अपनी साइट के साथ लोड करने के लिए मजबूर करते हैं। – RCGoforth

+0

आपने मुझे इतना समय बचाया, धन्यवाद। – Menahem

0

मैं अटकलें हैं कि क्योंकि Read कार्रवाई एक वैध परिणाम सेट नहीं लौटा रहा है त्रुटि हो रहा है।

आमतौर पर केंडो ग्रिड को JsonResult की आवश्यकता होती है जब अजाक्स मोड में पढ़ा जाता है। यदि आप एक खाली DataTable को जेसन परिणाम के रूप में सही रूप से स्वरूपित करते हैं तो मुझे संदेह है कि यह ठीक करेगा।

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

जाहिर है आप अपने वास्तविक परिणाम सेट के लिए DataTable प्रतिस्थापित कर देना चाहिए।

+0

मैंने यह परिवर्तन किया, लेकिन मुझे अभी भी त्रुटि प्राप्त हुई है। मेरे पास उस फ़ंक्शन में प्रवेश पर ब्रेकपॉइंट है, लेकिन यह उस तक पहुंच भी नहीं रहा है। क्या यह त्रुटि कार्रवाई या नियंत्रक को खोजने में सक्षम नहीं हो सकती है? – fortune

+0

क्या आप ब्राउज़र में AJAX अनुरोध की निगरानी कर सकते हैं और देख सकते हैं कि आपको कौन सा प्रतिक्रिया कोड मिल रहा है? Http स्थिति कोड आपको बताएगा कि क्या मार्ग नहीं मिला है या कोई प्राधिकरण समस्या या सर्वर त्रुटि है या नहीं। – nukefusion

+0

मैं अभी इसे देख लूंगा। साथ ही, मैंने अपनी पोस्ट को स्टैक ट्रेस के साथ अपडेट किया है, मुझे यकीन नहीं है कि यह सहायक होगा। – fortune

4

आपके समाधान की वेब.कॉन्फिग फ़ाइल में अनुभाग शामिल करके आपकी मदद करेगा।

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