剑道UI的Html网格“具有相同的键的项已被添加”
使用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
让我知道需要其他信息来尝试并确定它可能是什么。谢谢!
虽然我承认并不完全明白为什么这不起作用,但我通过修改网格如何获取数据来解决这个问题。我没有设置网格的DataSource属性,而是使用Read函数,我为网格指定了模型,如下所示: @(Html.Kendo()。Grid(Model.LoginHistories) 我添加了“LoginHistories”作为模型我的看法是使用。所以在Get函数中,我只是设置该属性类似于读取功能
它是第一次加载罚款吗? –
@AkashKC - 号如果我运行它没有断点,该页面将加载,但因为在点击阅读功能之前的网格错误没有任何内容。 – Andarta
您可以请分享您的控制器实施吗? –