I have two grids, each with a detail template, all pulling from different data sources.
If I comment out one or the other, I get no errors on either. If have them both render, the second grid gives an error 'PaymentId' is not defined when try to expand the row into detail. There is no PaymentId in any of the code for the second grid. I'm including the code for both grids is below.
Any help is greatly appreciated as I've been trying to hunt it down for hours but having no luck.
-- Second Grid ---
If I comment out one or the other, I get no errors on either. If have them both render, the second grid gives an error 'PaymentId' is not defined when try to expand the row into detail. There is no PaymentId in any of the code for the second grid. I'm including the code for both grids is below.
Any help is greatly appreciated as I've been trying to hunt it down for hours but having no luck.
@model Domain.Loan@(Html.Kendo().Grid<AmortizationScheduleGridModel>() .Name("AmortizationScheduleGrid") .Columns(columns => { columns.Bound(p => p.AmortizationLineId).Visible(false); columns.Bound(p => p.LineNumber); columns.Bound(p => p.PrincipalPaid).Title("Principal").Format("{0:c}") .ClientTemplate("# if (!IsPrincipalSatisfied) { #" + "<span class='not-satisfied'>" + "#=PrincipalPaid#" + "</span>" + "<span class='expected'> (#=PrincipalExpected#)</span>" + "# } else { #" + "<span class='satisfied'>" + "#=PrincipalPaid#" + "</span>" + " <span class='expected'>(#=PrincipalExpected#)</span>" + "# } #") .ClientFooterTemplate("<b>#=sum#</b><input id='pmtTotal' type='hidden' value='#=sum#' />"); columns.Bound(p => p.InterestPaid).Format("{0:c}"); columns.Bound(p => p.LateFeesPaid).Format("{0:c}"); columns.Bound(p => p.SpecialFeesPaid).Format("{0:c}"); columns.Bound(p => p.SpecialFeesComments); columns.Bound(p => p.AmortizationPrincipalBalance); columns.Bound(p => p.ActualPrincipalBalance); }) .ClientDetailTemplateId("paymentApplicationTemplate") .Sortable() .Scrollable() .DataSource(dataSource => dataSource .Ajax() .Aggregates(agg => { agg.Add(al => al.PrincipalPaid).Sum(); }) .Read(read => read.Action("CustomerAmortizationScheduleRead", "Payments", new { loanId = Model.Id })) ) .Events(ev => ev.DataBound("amoritzationDataBound")) .ToolBar(tb => { tb.Custom().Action<PaymentsController>(pc => pc.PrintLoanPayments(Model.Id)).Text("Print").Name("Print"); tb.Template("<button type='button' class='k-button k-button-icontext' onclick='toggleAmortizationPayments()'>Toggle Open</button>"); }) )<script id="paymentApplicationTemplate" type="text/kendo-tmpl"> @(Html.Kendo().Grid<PaymentApplicationModel>() .Name("paymentApplication_#=AmortizationLineId#") .Columns(columns => { columns.Bound(p => p.PaymentApplicationId).Visible(false); columns.Bound(p => p.DueDate).Title("Due").Format("{0:MM/dd/yyyy}"); columns.Bound(p => p.AmortizationLineNumber).Title("Line"); columns.Bound(p => p.PrincipalApplied).Title("Principal").Format("{0:c}") .ClientTemplate("\\# if (!IsPrincipalSatisfied) { \\#" + "<span class='not-satisfied'>" + "\\#=PrincipalApplied\\#" + "</span>" + "<span class='expected'> (\\#=PrincipalExpected\\#)</span>" + "\\# } else { \\#" + "<span class='satisfied'>" + "\\#=PrincipalApplied\\#" + "</span>" + " <span class='expected'>(\\#=PrincipalExpected\\#)</span>" + "\\# } \\#"); columns.Bound(p => p.InterestApplied).Title("Interest").Format("{0:c}") .ClientTemplate("\\# if (!IsInterestSatisfied) { \\#" + "<span class='not-satisfied'>" + "\\#=InterestApplied\\#" + "</span>" + "<span class='expected'> (\\#=InterestExpected\\#)</span>" + "\\# } else { \\#" + "<span class='satisfied'>" + "\\#=InterestApplied\\#" + "</span>" + " <span class='expected'>(\\#=InterestExpected\\#)</span>" + "\\# } \\#"); columns.Bound(p => p.LateFeesApplied).Title("Late").Format("{0:c}") .ClientTemplate("\\# if (!IsLateFeeSatisfied) { \\#" + "<span class='not-satisfied'>" + "\\#=LateFeesApplied\\#" + "</span>" + "<span class='expected'> (\\#=LateFeesExpected\\#)</span>" + "\\# } else { \\#" + "<span class='satisfied'>" + "\\#=LateFeesApplied\\#" + "</span>" + " <span class='expected'>(\\#=LateFeesExpected\\#)</span>" + "\\# } \\#"); columns.Bound(p => p.SpecialFeesApplied).Title("Special Fees").Format("{0:c}").ClientTemplate("\\# if (!IsSpecialFeeSatisfied) { \\#" + "<span class='not-satisfied'>" + "\\#=SpecialFeesApplied\\#" + "</span>" + "<span class='expected'> (\\#=SpecialFeesExpected\\#)</span>" + "\\# } else { \\#" + "<span class='satisfied'>" + "\\#=SpecialFeesApplied\\#" + "</span>" + " <span class='expected'>(\\#=SpecialFeesExpected\\#)</span>" + "\\# } \\#"); }) .DataSource(dataSource => dataSource .Ajax() .PageSize(5) .Read(read => read.Action("PaymentApplicationsReadByAmortizationLine", "Payments", new { amortizationLineId = "#=AmortizationLineId#" })) ) .ToClientTemplate() )</script><script type="text/javascript"> var amortizationPaymentsExpanded = false; function amoritzationDataBound() { } function toggleAmortizationPayments() { var paymentHistoryGrid = $("#AmortizationScheduleGrid").data("kendoGrid"); if (!amortizationPaymentsExpanded) { paymentHistoryGrid.expandRow(paymentHistoryGrid.tbody.find("tr.k-master-row")); amortizationPaymentsExpanded = true; } else { paymentHistoryGrid.collapseRow(paymentHistoryGrid.tbody.find("tr.k-master-row")); amortizationPaymentsExpanded = false; } }</script>-- Second Grid ---
@model Tristate.Domain.Loan<style> .k-grid td { font-size: 12px; }</style>@(Html.Kendo().Grid<AmortizationScheduleGridModel>() .Name("AmortizationScheduleGrid") .Columns(columns => { columns.Bound(p => p.AmortizationLineId).Visible(false); columns.Bound(p => p.LineNumber); columns.Bound(p => p.PrincipalPaid).Title("Principal").Format("{0:c}") .ClientTemplate("# if (!IsPrincipalSatisfied) { #" + "<span class='not-satisfied'>" + "#=PrincipalPaid#" + "</span>" + "<span class='expected'> (#=PrincipalExpected#)</span>" + "# } else { #" + "<span class='satisfied'>" + "#=PrincipalPaid#" + "</span>" + " <span class='expected'>(#=PrincipalExpected#)</span>" + "# } #") .ClientFooterTemplate("<b>#=sum#</b><input id='pmtTotal' type='hidden' value='#=sum#' />"); columns.Bound(p => p.InterestPaid).Format("{0:c}"); columns.Bound(p => p.LateFeesPaid).Format("{0:c}"); columns.Bound(p => p.SpecialFeesPaid).Format("{0:c}"); columns.Bound(p => p.SpecialFeesComments); columns.Bound(p => p.AmortizationPrincipalBalance); columns.Bound(p => p.ActualPrincipalBalance); }) .ClientDetailTemplateId("paymentApplicationTemplate") .Sortable() .Scrollable() .DataSource(dataSource => dataSource .Ajax() .Aggregates(agg => { agg.Add(al => al.PrincipalPaid).Sum(); }) .Read(read => read.Action("CustomerAmortizationScheduleRead", "Payments", new { loanId = Model.Id })) ) .Events(ev => ev.DataBound("amoritzationDataBound")) .ToolBar(tb => { tb.Custom().Action<PaymentsController>(pc => pc.PrintLoanPayments(Model.Id)).Text("Print").Name("Print"); tb.Template("<button type='button' class='k-button k-button-icontext' onclick='toggleAmortizationPayments()'>Toggle Open</button>"); }) )<script id="paymentApplicationTemplate" type="text/kendo-tmpl"> @(Html.Kendo().Grid<PaymentApplicationModel>() .Name("paymentApplication_#=AmortizationLineId#") .Columns(columns => { columns.Bound(p => p.PaymentApplicationId).Visible(false); columns.Bound(p => p.DueDate).Title("Due").Format("{0:MM/dd/yyyy}"); columns.Bound(p => p.AmortizationLineNumber).Title("Line"); columns.Bound(p => p.PrincipalApplied).Title("Principal").Format("{0:c}") .ClientTemplate("\\# if (!IsPrincipalSatisfied) { \\#" + "<span class='not-satisfied'>" + "\\#=PrincipalApplied\\#" + "</span>" + "<span class='expected'> (\\#=PrincipalExpected\\#)</span>" + "\\# } else { \\#" + "<span class='satisfied'>" + "\\#=PrincipalApplied\\#" + "</span>" + " <span class='expected'>(\\#=PrincipalExpected\\#)</span>" + "\\# } \\#"); columns.Bound(p => p.InterestApplied).Title("Interest").Format("{0:c}") .ClientTemplate("\\# if (!IsInterestSatisfied) { \\#" + "<span class='not-satisfied'>" + "\\#=InterestApplied\\#" + "</span>" + "<span class='expected'> (\\#=InterestExpected\\#)</span>" + "\\# } else { \\#" + "<span class='satisfied'>" + "\\#=InterestApplied\\#" + "</span>" + " <span class='expected'>(\\#=InterestExpected\\#)</span>" + "\\# } \\#"); columns.Bound(p => p.LateFeesApplied).Title("Late").Format("{0:c}") .ClientTemplate("\\# if (!IsLateFeeSatisfied) { \\#" + "<span class='not-satisfied'>" + "\\#=LateFeesApplied\\#" + "</span>" + "<span class='expected'> (\\#=LateFeesExpected\\#)</span>" + "\\# } else { \\#" + "<span class='satisfied'>" + "\\#=LateFeesApplied\\#" + "</span>" + " <span class='expected'>(\\#=LateFeesExpected\\#)</span>" + "\\# } \\#"); columns.Bound(p => p.SpecialFeesApplied).Title("Special Fees").Format("{0:c}").ClientTemplate("\\# if (!IsSpecialFeeSatisfied) { \\#" + "<span class='not-satisfied'>" + "\\#=SpecialFeesApplied\\#" + "</span>" + "<span class='expected'> (\\#=SpecialFeesExpected\\#)</span>" + "\\# } else { \\#" + "<span class='satisfied'>" + "\\#=SpecialFeesApplied\\#" + "</span>" + " <span class='expected'>(\\#=SpecialFeesExpected\\#)</span>" + "\\# } \\#"); }) .DataSource(dataSource => dataSource .Ajax() .PageSize(5) .Read(read => read.Action("PaymentApplicationsReadByAmortizationLine", "Payments", new { amortizationLineId = "#=AmortizationLineId#" })) ) .ToClientTemplate() )</script><script type="text/javascript"> var amortizationPaymentsExpanded = false; function amoritzationDataBound() { } function toggleAmortizationPayments() { var paymentHistoryGrid = $("#AmortizationScheduleGrid").data("kendoGrid"); if (!amortizationPaymentsExpanded) { paymentHistoryGrid.expandRow(paymentHistoryGrid.tbody.find("tr.k-master-row")); amortizationPaymentsExpanded = true; } else { paymentHistoryGrid.collapseRow(paymentHistoryGrid.tbody.find("tr.k-master-row")); amortizationPaymentsExpanded = false; } }</script>