2017-10-20 5 views
0

Mit Telerik Kendo UI, Kendo.Mvc Version 2016.3.1028.545Kendo UI Html Grid

Ich habe 'ein Element mit demselben Schlüssel wurde bereits hinzugefügt' eine Ansicht, die ein HTML-Raster wie so enthält:

  @(Html.Kendo().Grid<TfUserLoginHistoryReturnModel>() 
       .Name("loginHistoryGrid") 
       .DataSource(dataSource => dataSource 
        .Ajax() 
        .Read(read => read.Action("LoginHistory_Read", "Administration", new { DateStart = Model.StartDate })) 
        .Model(model => model.Id(p => p.UserID) 
        ) 
       ) 
       .Events(events => events.DataBound("onGridDataBound")) 
       .Columns(columns => 
       { 
        columns.Bound(p => p.FullName).Title("Full Name"); 
        columns.Bound(p => p.Email); 
        columns.Bound(p => p.CompanyName).Title("Company"); 
        columns.Bound(p => p.UserType).Title("User Type"); 
        columns.Bound(p => p.AcceptedTermsDate).Title("Date Accepted Terms").Format("{0:MM/dd/yyyy}").Width(125); 
        columns.Bound(p => p.LastSuccessfulLogin).Title("Last Login").Format("{0:MM/dd/yyyy}").Width(125); 
        columns.Bound(p => p.NumLogins).Title("Number of Logins"); 
        columns.Bound(p => p.TotalTime).Title("Time Logged (minutes)"); 
       }) 
       .Pageable() 
       .Sortable() 
       .Scrollable() 
       .Filterable(f => f.Extra(true) 
        .Operators(o => o.ForString(s => s.Clear() 
        .Contains("Contains") 
        .DoesNotContain("Does not contain") 
        .IsEqualTo("Is equal to") 
        .IsNotEqualTo("Is not equal to") 
        .StartsWith("Starts with") 
        .EndsWith("Ends with") 
        .IsEmpty("Is empty") 
        .IsNotEmpty("Is not empty") 
        .IsNull("Is null") 
        .IsNotNull("Is not null ")))) 
       .HtmlAttributes(new { style = "height:500px;" }) 
      ) 

Assoziierte Scripts:

function onGridDataBound(e) { 
     var grid = e.sender; 
     if (grid.dataSource.total() == 0) { 
      $(grid).hide(); 
     } 
     else { 
      $(grid).show(); 
     } 
    } 

    function searchUserGrid(e) { 
     if ($("#userSearchText").val() == "") { 
      $("#loginHistoryGrid").data("kendoGrid").dataSource.filter({ field: "UserId", operator: "equals", value: -1 }); 
     } else { 
      $filter = [{ 
       "logic": "or", 
       "filters": [ 
         { field: "FullName", operator: "contains", value: $("#userSearchText").val() }, 
         { field: "Email", operator: "contains", value: $("#userSearchText").val() }, 
         { field: "CompanyName", operator: "contains", value: $("#userSearchText").val() } 
       ] 
      }]; 
      $("#loginHistoryGrid").data("kendoGrid").dataSource.filter($filter); 
     } 
    } 

Hier ist die in der Steuerung für diese Ansicht Get:

[HttpGet] 
    public ActionResult UsageReport(string DateStart) 
    { 
     try 
     { 
      UserLoginHistoryViewModel m = new UserLoginHistoryViewModel(); 

      //default is yesterday 
      DateTime sdt = DateTime.Now.Date.AddDays(-1); 
      if (!string.IsNullOrWhiteSpace(DateStart)) 
      { 
       DateTime.TryParse(DateStart, out sdt); 
      } 
      m.StartDate = sdt; 

      return View(m); 
     } 
     catch (Exception ex) 
     { 
      logger.Error("UsageReportGet", ex); 
      return RedirectToAction("Index", "Administration"); 
     } 
    } 

Wenn ich dies mit einem Haltepunkt ausführen und auf diese Seite gehe, trifft es nicht einmal LoginHistory_Read in der Steuerung. Wenn es auf das Gitter trifft, wird es fehlerhaft. Hier ist der Fehler und Stack-Trace:

System.ArgumentException wurde nicht behandelt durch Benutzercode
HResult = -2147024809 Nachricht Ein Element mit dem gleichen Schlüssel = bereits hinzugefügt. Quelle = Mscorlib StackTrace: bei System.ThrowHelper.ThrowArgumentException (ExceptionResource Ressource) bei System.Collections.Generic.Dictionary'2.Insert (TKey-Schlüssel, TValue-Wert, Boolean hinzufügen) bei System.Web.RoutingVoueDictionary.Add (String key, Object-Wert) bei Kendo.Mvc.UI.GridBoundColumn'2.CreateHeaderBuilderCore() bei Kendo.Mvc.UI.GridColumnBase'1.CreateHeaderBuilder() bei Kendo.Mvc.UI.Html.GridCellBuilderFactory.CreateHeaderCellBuilder (IGridColumn Spalte) bei System.Linq.Enumerable.WhereSelectEnumerableIterator'2.MoveNext() bei Kendo.Mvc.UI.Html.GridRowBuilder.CreateRow() bei Kendo.Mvc.UI.Html.GridHeaderRowBuilder.CreateRow()bei Kendo.Mvc.UI.Html.GridRowBuilderDecoratorBase.CreateRow() bei Kendo.Mvc.UI.Html.GridRowBuilderDecoratorBase.CreateRow() bei Kendo.Mvc.UI.Html.GridRowBuilderDecoratorBase.CreateRow() bei Kendo.Mvc (.UI.Html.GridRowBuilderDecoratorBase.CreateRow) bei Kendo.Mvc.UI.Html.GridRowBuilderDecoratorBase.CreateRow() bei Kendo.Mvc.UI.Html.GridRowBuilderDecoratorBase.CreateRow() bei Kendo.Mvc.UI.Html. GridRowBuilderDecoratorBase.CreateRow() bei Kendo.Mvc.UI.Html.GridDataSectionBuilder.CreateHeader (GridRenderingData data) bei Kendo.Mvc.UI.Html.GridScrollingHtmlBuilder.CreateHeader (GridRenderingData renderingData) bei Kendo.Mvc.UI.Html .GR idScrollingHtmlBuilder.AppendData (IHtmlNode div, GridRenderingData renderingData) bei Kendo.Mvc.UI.Html.GridHtmlBuilder.CreateGrid (IDictionary'2 Htmlattributes, GridFunctionalData functionalData, GridRenderingData renderingData) bei Kendo.Mvc.UI.Grid'1.WriteHtml (Htmltextwriter writer) bei Kendo.Mvc.UI.WidgetBase.ToHtmlString() bei Kendo.Mvc.UI.Fluent.WidgetBuilderBase'2.ToHtmlString() bei System.Web.HttpUtility.HtmlEncode (Objektwert) bei System .Web.WebPages.WebPageBase.Write (Objektwert) unter ASP._Page_Views_Administration_UsageReport_cshtml.Execute() in C: \ Benutzer \ tsimpson \ Source \ Arbeitsbereiche \ CustomerPortal \ CEConnect \ CEConnect \ Views \ Administration \ UsageReport.cshtml : Zeile bei System.Web.WebPages.WebPageBase.ExecutePageHierarchy() bei System.Web.Mvc.WebViewPage.ExecutePageHierarchy() bei System.Web.WebPages.StartPage.RunPage() bei System.Web.WebPages.StartPage.ExecutePageHierarchy() bei System.Web.WebPages.WebPageBase.ExecutePageHierarchy (WebPageContext pagecontext, Textwriter writer, WebPageRenderingBase Startpage) bei System.Web.Mvc.RazorView.RenderView (ViewContext viewContext, TextWriter-Writer, Objektinstanz) bei System.Web.Mvc.BuildManagerCompiledView.Render (ViewContext viewContext, TextWriter-Writer) bei System.Web.Mvc.ViewResultBase.ExecuteResult (ControllerContext-Kontext) bei System.Web.Mvc. ControllerActionInvoker.InvokeActionResult (ControllerContext controllerContext, ActionResult actionResult) bei System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive (IList'1 Filter, Int32 filter, ResultExecutingContext Vorkontext, Controllercontroller, Actionaction) bei System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive (IList'1 Filter, Int32 filter, ResultExecutingContext Vorkontext, Controllercontroller, Actionaction)
Innerexception :

Also wenn ich es ohne Haltepunkte ausführen, wird die Seite geladen, aber das Raster ist leer.

Ich habe keine Ahnung, wie ich wissen soll, was es an dieser Stelle zum Wörterbuch hinzuzufügen versucht. Ich habe das mit anderen Gittern auf meiner Website verglichen, die funktionieren, und sehe nicht, was dieses Problem verursachen könnte.

Dies ist ein Video, das ich gemacht habe, wie das Laufen aussieht, damit Sie genau sehen können, an welcher Stelle der Fehler auftaucht - hoffentlich hilft das. Stellen Sie sicher, dass Sie 1080p einstellen! Kendo Grid Error

Lassen Sie mich wissen, welche anderen Informationen benötigt werden, um herauszufinden, was es sein könnte. Vielen Dank!

+0

Ist es Laden für das erste Mal? –

+0

@AkashKC - Nein. Wenn ich es ohne Haltepunkte ausführen, Die Seite wird geladen, aber weil die Gitterfehler vor dem Drücken der Read-Funktion gibt es nichts drin. – Andarta

+0

Könnten Sie bitte Ihre Controller-Implementierung zu teilen? –

Antwort

0

Also, obwohl ich zugegebenermaßen nicht ganz verstehe, warum das nicht funktionierte, habe ich es umgestaltet, indem ich nachgearbeitet habe, wie das Gitter seine Daten bekommt. Anstatt die DataSource-Eigenschaften des Rasters zu setzen und eine Read-Funktion zu verwenden, gebe ich das Modell für das Raster wie folgt an: @ (Html.Kendo(). Grid (Model.LoginHistories) Und ich habe "LoginHistories" als eine Eigenschaft der hinzugefügt Modell, das meine Sicht verwendet. Also in der Get-Funktion, ich habe nur diese Eigenschaft ähnlich wie die Read-Funktion getan.