【发布时间】:2018-03-29 19:23:28
【问题描述】:
使用 Telerik 的 Kendo UI,Kendo.Mvc 版本 2016.3.1028.545
我有一个包含 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);
}
}
这是控制器中该视图的 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");
}
}
当我使用断点运行它并转到该页面时,它甚至没有在控制器中点击LoginHistory_Read。在击中网格时,它会出错。这是错误和堆栈跟踪:
System.ArgumentException 未被用户代码处理
HResult=-2147024809 Message=具有相同键的项目已经 被添加。来源=mscorlib 堆栈跟踪: 在 System.ThrowHelper.ThrowArgumentException(ExceptionResource 资源) at System.Collections.Generic.Dictionary'2.Insert(TKey key, TValue value, Boolean add) 在 System.Web.Routing.RouteValueDictionary.Add(字符串键,对象值) 在 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 渲染数据) 在 Kendo.Mvc.UI.Html.GridScrollingHtmlBuilder.AppendData(IHtmlNode div, GridRenderingData 渲染数据) 在 Kendo.Mvc.UI.Html.GridHtmlBuilder.CreateGrid(IDictionary'2 htmlAttributes, GridFunctionalData functionalData, GridRenderingData 渲染数据) 在 Kendo.Mvc.UI.Grid'1.WriteHtml(HtmlTextWriter writer) 在 Kendo.Mvc.UI.WidgetBase.ToHtmlString() 在 Kendo.Mvc.UI.Fluent.WidgetBuilderBase'2.ToHtmlString() 在 System.Web.HttpUtility.HtmlEncode(对象值) 在 System.Web.WebPages.WebPageBase.Write(对象值) 在 ASP._Page_Views_Administration_UsageReport_cshtml.Execute() 中 C:\Users\tsimpson\Source\Workspaces\CustomerPortal\CEConnect\CEConnect\Views\Administration\UsageReport.cshtml:line 42 在 System.Web.WebPages.WebPageBase.ExecutePageHierarchy() 在 System.Web.Mvc.WebViewPage.ExecutePageHierarchy() 在 System.Web.WebPages.StartPage.RunPage() 在 System.Web.WebPages.StartPage.ExecutePageHierarchy() 在 System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) 在 System.Web.Mvc.RazorView.RenderView(ViewContext viewContext,TextWriter writer,Object 实例) 在 System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext,TextWriter writer) 在 System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext 上下文) 在 System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext 控制器上下文,动作结果动作结果) 在 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)
内部异常:
所以如果我在没有断点的情况下运行它,页面会加载,但网格是空的。
当时我不知道如何知道它试图添加到字典中的内容。我将此与我网站中其他有效的网格进行了比较,但看不出是什么导致了这个问题。
这是我制作的一段视频,展示了走过它的样子,因此您可以准确地看到错误出现的时间 - 希望对您有所帮助。请务必将其设置为 1080p! Kendo Grid Error
让我知道需要哪些其他信息来尝试确定它可能是什么。谢谢!
【问题讨论】:
-
第一次加载正常吗?
-
@AkashKC - 不。如果我在没有断点的情况下运行它,页面将加载,但由于在点击读取功能之前出现网格错误,因此其中没有任何内容。
-
你能分享一下你的控制器实现吗?
-
@AkashKC - 我为它添加了 Get。
-
尝试将您的操作更改为
public ActionResult UsageReport([DataSourceRequest] DataSourceRequest request,string DateStart)
标签: asp.net-mvc kendo-ui kendo-grid