2017-10-20 89 views
0

使用Telerik的劍道UI,Kendo.Mvc版本2016.3.1028.545劍道UI的Html網格「具有相同的鍵的項已被添加」

我有一個包含一個html格像這樣一個觀點:

  @(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;" }) 
      ) 

相關的腳本:

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

這裏是獲取在控制器觀點:

[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"); 
     } 
    } 

當我運行這個斷點並進入該頁面時,它甚至不會在控制器中打到LoginHistory_Read。當擊中網格時,它會出錯。以下是錯誤和堆棧跟蹤:

System.ArgumentException了未處理由用戶代碼
的HResult = -2147024809消息=具有相同的鍵已經 被添加的項目。 Source = mscorlib StackTrace: at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource) at System.Collections.Generic.Dictionary'2.Insert(TKey key,TValue value,Boolean add) at System.Web.Routing.RouteValueDictionary.Add (String鍵,對象的值) 在Kendo.Mvc.UI.GridBoundColumn'2.CreateHeaderBuilderCore() 在Kendo.Mvc.UI.GridColumnBase'1.CreateHeaderBuilder() 在Kendo.Mvc.UI.Html.GridCellBuilderFactory.CreateHeaderCellBuilder (IGridColumn 列) 在System.Linq.Enumerable.WhereSelectEnumerableIterator'2.MoveNext() 在Kendo.Mvc.UI.Html.GridRowBuilder.CreateRow() 在Kendo.Mvc.UI.Html.GridHeaderRowBuilder.CreateRow() 在Kendo.Mvc.UI.Html.GridRowBuilderDecoratorBase.CreateRow() 在Kendo.Mvc.UI.Html.GridRowBuilderDecoratorBase.CreateRow() 在Kendo.Mvc.UI.Html.GridRowBuilderDecoratorBase.CreateRow() 在Kendo.Mvc .UI.Html.GridRowBuilderDecoratorBase.CreateRow() 在Kendo.Mvc.UI.Html.GridRowBuilderDecoratorBase.CreateRow() 在Kendo.Mvc.UI.Html.GridRowBuilderDecoratorBase.CreateRow() 在Kendo.Mvc.UI.Html。 GridRowBuilderDecoratorBase.CreateRow() 在Kendo.Mvc.UI.Html.GridDataSectionBuilder.CreateHeader(GridRenderingData 數據) 在Kendo.Mvc.UI.Html.GridScrollingHtmlBuilder.CreateHeader(GridRenderingData renderingData) 在Kendo.Mvc.UI.Html .Gr idScrollingHtmlBuilder.AppendData(IHtmlNode DIV, GridRenderingData renderingData) 在Kendo.Mvc.UI.Html.GridHtmlBuilder.CreateGrid(IDictionary'2 htmlAttributes,GridFunctionalData functionalData,GridRenderingData renderingData) 在Kendo.Mvc.UI.Grid'1.WriteHtml (HtmlTextWriter的作家) 在Kendo.Mvc.UI.WidgetBase.ToHtmlString() 在Kendo.Mvc.UI.Fluent.WidgetBuilderBase'2.ToHtmlString() 在System.Web.HttpUtility.HtmlEncode(對象的值) 在系統.Web.WebPages.WebPageBase.Write(Object value) at ASP._Page_Views_Administration_UsageReport_cshtml.Execute()in C:\ Users \ tsimpson \ Source \ Workspaces \ CustomerPortal \ CEConnect \ CEConnect \ Views \ Administration \ UsageReport.cshtml :行 at System.Web.WebPages.WebPageBase.ExecutePageHierarchy() at System.Web.Mvc.WebViewPage.ExecutePageHierarchy() at System.Web.WebPages.StartPage。RunPage() 在System.Web.WebPages.StartPage.ExecutePageHierarchy() 在System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext 的pageContext,TextWriter的作家,WebPageRenderingBase起始頁) 在System.Web.Mvc.RazorView.RenderView( ViewContext viewContext,TextWriter writer,Object instance) at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext,TextWriter writer) at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) at System.Web.Mvc。 ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext,ActionResult actionResult) at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList'1 個過濾器,的Int32 filterIndex,ResultExecutingContext preContext, ControllerContext controllerContext,的ActionResult的ActionResult) 在System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList'1 過濾器,的Int32 filterIndex,ResultExecutingContext preContext, ControllerContext controllerContext,的ActionResult的ActionResult)
的InnerException :

所以如果我運行它沒有斷點,頁面將加載,但網格是空的。

我不知道如何知道它在那時試圖添加到字典中。我將它與我網站上的其他網格做了比較,並沒有看到它可能導致這個問題。

這是我製作的視頻,它看起來像是這樣,你可以準確地看到錯誤出現在哪一點 - 希望這有助於。一定要將其設置爲1080p! Kendo Grid Error

讓我知道需要其他信息來嘗試並確定它可能是什麼。謝謝!

+0

它是第一次加載罰款嗎? –

+0

@AkashKC - 號如果我運行它沒有斷點,該頁面將加載,但因爲在點擊閱讀功能之前的網格錯誤沒有任何內容。 – Andarta

+0

您可以請分享您的控制器實施嗎? –

回答

0

雖然我承認並不完全明白爲什麼這不起作用,但我通過修改網格如何獲取數據來解決這個問題。我沒有設置網格的DataSource屬性,而是使用Read函數,我爲網格指定了模型,如下所示: @(Html.Kendo()。Grid(Model.LoginHistories) 我添加了「LoginHistories」作爲模型我的看法是使用。所以在Get函數中,我只是設置該屬性類似於讀取功能

相關問題