Javascript 客户端上的剑道网格抛出异常:无法读取属性';长度';未定义的

Javascript 客户端上的剑道网格抛出异常:无法读取属性';长度';未定义的,javascript,c#,kendo-asp.net-mvc,Javascript,C#,Kendo Asp.net Mvc,我在Razor中创建了一个包含动态列和分组的剑道网格。控制器成功地获取了每个条件下的记录,并将其作为Json响应传递给kendoGrid。在客户端,Kendo.all.min.js给出了一个错误,说无法读取未定义的的属性'length'。我想到的线索是,有些列有空记录,但这个网格有150多个列显示选定的列。因此,我需要花费相当长的时间逐个添加每列并测试它 $(文档).ready(函数(){ @如果(!string.IsNullOrEmpty(groupByCol)) { $(“#@ViewDa

我在Razor中创建了一个包含动态列和分组的剑道网格。控制器成功地获取了每个条件下的记录,并将其作为Json响应传递给kendoGrid。在客户端,
Kendo.all.min.js
给出了一个错误,说
无法读取未定义的
的属性'length'。我想到的线索是,有些列有空记录,但这个网格有150多个列显示选定的列。因此,我需要花费相当长的时间逐个添加每列并测试它

$(文档).ready(函数(){
@如果(!string.IsNullOrEmpty(groupByCol))
{
$(“#@ViewData[“ReportSection”]ProjectReportGrid”).data(“kendoGrid”).dataSource.group({field:@groupByCol”,dir:@groupSort})
}
var reportName='@Model.reportName';
setGridSettings(“#@ViewData[“ReportSection”]ProjectReportGrid”,“@ViewData[“ReportSection”]ProjectReportGrid.@Model.ReportName.Replace(“,”)”);
});
函数@ViewData[“ReportSection”]savemysettings(){
SaveGridSettings(“#@ViewData[“ReportSection”]ProjectReportGrid”,“@ViewData[“ReportSection”]ProjectReportGrid.@Model.ReportName.Replace(“,”)”);
}
/*未应用自定义样式*/
@model ViewModels.reportingtoolpreviewmodel
@使用Kendo.Mvc.UI
@{
bool Isplanning=ViewData[“ReportSection”]。ToString()=“规划”;
字符串groupByCol=Model.SortAndGroup.Select(x=>x.FieldLogicalName).FirstOrDefault();
string groupSort=Model.SortAndGroup.Select(x=>x.IsDescending.FirstOrDefault()?“desc”:“asc”;
bool calculateTotal=false;
}
@(Html.Kendo().Grid(Model.Projects)
.Name(ViewData[“ReportSection”]+“ProjectReportGrid”)
.HtmlAttributes(新的{@style=“display:inline块;宽度:100%;”})
.列(列=>
{
...
})
.DataSource(DataSource=>DataSource.Ajax().Read(r=>r.Action(“GetDataForProjectReport”、“ReportingTool”).Data(“{reportId:+ViewBag.reportId+”,IsPlanning:“+IsPlanning.ToString()+”)).PageSize(100)
.聚合(聚合=>
{
如果(计算总数)
{
aggregates.Add(p=>p.BillCredit).Sum();
aggregates.Add(p=>p.BillItemTotalCost).Sum();
aggregates.Add(p=>p.TotalBillBudgetItem.Sum();
aggregates.Add(p=>p.CangeOrderBudget.Sum();
aggregates.Add(p=>p.BudgetCurrentCostBudgetItem.Sum();
aggregates.Add(p=>p.BudgetOriginalBudget).Sum();
aggregates.Add(p=>p.BudgetTotalBudget.Sum();
//aggregates.Add(p=>p.BudgetTotalCostBudgetItem.Sum();
aggregates.Add(p=>p.BillItemUnitCost).Sum();
aggregates.Add(p=>p.BudgetItemVariance).Sum();
aggregates.Add(p=>p.COChangeOrderAmount).Sum();
aggregates.Add(p=>p.FinRemainingProfit).Sum();
aggregates.Add(p=>p.FinChangeOrderBudgetItem.Sum();
aggregates.Add(p=>p.FinChangeOrderAmount).Sum();
aggregates.Add(p=>p.FinContractBalance.Sum();
aggregates.Add(p=>p.FinDrawsTaken.Sum();
aggregates.Add(p=>p.FinEstimatedBudgetItem).Sum();
aggregates.Add(p=>p.FinProjectContractAmount).Sum();
aggregates.Add(p=>p.FinPaymentReceived).Sum();
aggregates.Add(p=>p.FinProjectBankAccount.Sum();
aggregates.Add(p=>p.FinRemainingCost).Sum();
aggregates.Add(p=>p.FinTotalBudget.Sum();
aggregates.Add(p=>p.FinContractAmountTotal).Sum();
aggregates.Add(p=>p.FinTotalCost.Sum();
aggregates.Add(p=>p.FinProfitTotal.Sum();
aggregates.Add(p=>p.FinVariance.Sum();
aggregates.Add(p=>p.ProjectContractAmount).Sum();
aggregates.Add(p=>p.ProjectContractedAmount).Sum();
aggregates.Add(p=>p.ReceivableAmountDue).Sum();
aggregates.Add(p=>p.receivableamountpayed).Sum();
aggregates.Add(p=>p.receivableball).Sum();
}
})
)
.Events(x=>x.DataBound(“AdjustGrid”).ColumnShow(ViewData[“ReportSection”]+“savemysettings”).ColumnResize(ViewData[“ReportSection”]+“savemysettings”).ColumnLock(ViewData[“ReportSection”]+“savemysettings”).ColumnUnlock(ViewData[“ReportSection”]+“savemysettings”).ColumnHide(ViewData[“ReportSection”]+“savemysettings”))
.NoRecords(n=>n.Template(“没有要显示的记录”))
.Filterable(ftb=>ftb.Mode(GridFilterMode.Row))
.ToolBar(tools=>tools.Excel()).Excel(Excel=>Excel.FileName(Model.ReportName+“.xlsx”).Filterable(true))
.Sortable()
.Scrollable()
.column菜单(x=>x.Filterable(真))
.Reorderable(x=>x.Columns(true))

.reshable(x=>x.Columns(true)).Pageable(x=>x.PageSizes(新字符串[]{“25”、“50”、“100”、“All”}).PreviousNext(true).Refresh(true).Numeric(true).Messages(m=>m.Display(“找到的{2}条记录总数!”))
问题是
groupByCol
从模型中获取分组列的名称,但在网格中未选择该列。 e、 g我制作了一个不包含
createdDate
列的报告,我选择了相同的列进行分组,那么剑道将无法获取该列并引发异常。 因此,当我检查
groupByCol
是否不在所选列中时,我添加了隐藏列,以便剑道可以对数据进行分组

用注释解释场景

@if (!string.IsNullOrEmpty(groupByCol)) //here groupByCol='ColumnA'
{
    <text>$("#@ViewData["ReportSection"]ProjectReportGrid").data("kendoGrid").dataSource.group({ field: "@groupByCol", dir: "@groupSort" }); //this line causes error as ColumnA is not in the grid</text>
}
@if(!string.IsNullOrEmpty(groupByCol))//此处groupByCol='ColumnA'
{
$(#@ViewData[“ReportSection”]ProjectReportGrid”).data(“kendoGrid”).dataSource.group({field:@groupByCol,dir:@groupSort”})//由于ColumnA不在网格中,此行会导致错误
}

您的脚本包(包括javascript版本)是什么样子的?我在整个过程中使用jQuery v2.1.3和剑道UI v2016.3.1028