Configuration :
Main page with grid, editable.Mode(GridEditMode.PopUp)
This Popup page also have grid with PopUp mode, last Popup page have Treeview with property .Checkboxes(true)
This popup windows newer appear.
To fix the situation have to delete .Checkboxes property from TreeView . As workaround delete Checkboxes and use TemplateId with scripted template and .ToClientTemplate for treeview.
But this situation definitely Kendo ui bug, and have to be fixed
4 Answers, 1 is accepted
Hello Boris,
Please provide a isolated runnable example that reproduces the problem.
Regards,Alex Gyoshev
Telerik
public ActionResult _Read([DataSourceRequest] DataSourceRequest request){ List<Product> MyProduct = GetProductsList(); return Json(MyProduct.ToDataSourceResult(request));} public ActionResult _Update([DataSourceRequest] DataSourceRequest request, Product product){ //Manually add an model error in order to simulate validation error ModelState.AddModelError("Name", "My server error"); return Json(ModelState.ToDataSourceResult());}public ActionResult _ReadDetail([DataSourceRequest] DataSourceRequest request){ List<SecondProduct> MyProduct = GetSecondProductsList(); return Json(MyProduct.ToDataSourceResult(request));}public ActionResult _UpdateDetail([DataSourceRequest] DataSourceRequest request, Product product){ //Manually add an model error in order to simulate validation error ModelState.AddModelError("Name", "My server error"); return Json(ModelState.ToDataSourceResult());}private List<Product> GetProductsList() { List<Product> MyProd = new List<Product>(); for (int i = 1; i < 10; i++) { Product p = new Product(); p.Id = i; p.Name = "Product #" + i.ToString(); MyProd.Add(p); } return MyProd;}private List<SecondProduct> GetSecondProductsList(){ List<SecondProduct> MyProd = new List<SecondProduct>(); for (int i = 1; i < 10; i++) { SecondProduct p = new SecondProduct(); p.Id = i; p.Name = "Product #" + i.ToString(); MyProd.Add(p); } return MyProd;}public JsonResult GetAOL(int? id) { List<TreeViewItemModel> MyAOL = GetAreaLaw(); return Json(MyAOL, JsonRequestBehavior.AllowGet);}private List<TreeViewItemModel> GetAreaLaw(){ List<TreeViewItemModel> TVList = new List<TreeViewItemModel>(); TreeViewItemModel AL = new TreeViewItemModel(); AL.Id = "1"; AL.Text = "ROOT-1"; AL.HasChildren = true; AL.Expanded = true; TreeViewItemModel SubAL = new TreeViewItemModel(); SubAL.Id = "3"; SubAL.Text = "Sub-1-1"; AL.Items.Add(SubAL); TVList.Add(AL); AL = new TreeViewItemModel(); AL.Id = "2"; AL.Text = "ROOT-2"; AL.HasChildren = true; AL.Expanded = true; SubAL = new TreeViewItemModel(); SubAL.Id = "4"; SubAL.Text = "Sub-2-1"; SubAL.Checked = true; AL.Items.Add(SubAL); SubAL = new TreeViewItemModel(); SubAL.Id = "5"; SubAL.Text = "Sub-2-2"; AL.Items.Add(SubAL); TVList.Add(AL); return TVList;}
Model:
public class Product { public int Id { get; set; } [Required] public string Name { get; set; } } public class SecondProduct { public int Id { get; set; } [Required] public string Name { get; set; } }Index.cshtml :
<div class="container-fluid"> <div class="row"> <div class="col-xs-18 col-md-12"> @(Html.Kendo() .Grid<EditingWithServerValidation.Models.Product>() .Name("Grid") .Columns(columns => { columns.Bound(p => p.Id); columns.Bound(p => p.Name); columns.Command(command => command.Edit()).Width(100); }) .Editable(editable => editable.Mode(GridEditMode.PopUp).TemplateName("DetailsGrid")) .DataSource(dataSource => dataSource .Ajax() .Batch(false) .ServerOperation(false) .Model(model => model.Id(p => p.Id)) .Read("_Read", "Home") .Update("_Update", "Home") ) ) </div> </div></div><script> function onDataBound(e) { $("#refModelTreeView").data("kendoTreeView").expand(".k-item") }</script>
EditorTemplates
DetailsGrid.cshtml :
<div class="container-fluid"> <div class="row"> <div class="col-xs-18 col-md-12"> @(Html.Kendo() .Grid<EditingWithServerValidation.Models.SecondProduct>() .Name("SecondGrid") .Columns(columns => { columns.Bound(sp => sp.Id); columns.Bound(sp => sp.Name); columns.Command(command => command.Edit()).Width(100); }) .Editable(editable => editable.Mode(GridEditMode.PopUp).TemplateName("DetailsTV")) .DataSource(dataSource => dataSource .Ajax() .Model(model => model.Id(sp => sp.Id)) .Read("_ReadDetail", "Home") .Update("_UpdateDetail", "Home") ) ) </div> </div></div>DetailsTV.cshtml :
@(Html.Kendo().TreeView() .Name("refModelTreeView") .DataTextField("Text") .Checkboxes(checkboxes => checkboxes .CheckChildren(true) ) .Events(events => events .DataBound("onDataBound") ) .DataSource(datasource => datasource .Model(m=> m .Id("Id") .HasChildren("HasChildren") .Children("Items") ) .Read(read => read .Action("GetAOL", "Home") ) ) )​
Hello Boris,
Thank you for providing the code, we have reproduced the issue and are currently working on a fix.
Regards,Alex Gyoshev
Telerik
Hello Boris,
The error is caused by the escaping of the default checkbox template. Since the framework cannot determine internally the amount of nesting, it can only handle one level of template nesting. To resolve this problem, use the following checkbox template:
.Template("<input type='checkbox' name='\\#= treeview.checkboxes.name \\#' \\#= item.checked ? 'checked' : '' \\# value='\\#= item.id \\#' />")
This will escape the evaluation of the default template correctly.
Regards,Alex Gyoshev
Telerik