I have a model with a dynamic number of attributes that I am displaying in a grid using the method described here. The ajax read, edit, and destroy functions work properly, but I can't get the create button to generate a new line in the grid. Is there a way to get this functionality working with dynamically generated columns?
Model:
01.public class Product02. {03. public int ID { get; set; }04. 05. private string _Name = "Product";06. public string Name07. {08. get { return _Name; }09. set { _Name = value; }10. }11. 12. public Dictionary<string, int> OptionIDs { get; set; }13. }Grid in View:
01. @(Html.Kendo().Grid<dynamic>()02. .Name("grid")03. .Columns(columns =>04. {05. columns.Bound("Name").Title("Name").EditorTemplateName("String");06. columns.Bound("ID").Title("Product ID").EditorTemplateName("Integer");07. 08. foreach (Dimension d in Model.Dimensions)09. {10. columns.Bound($"OptionIDs[{d.ID.ToString()}]").Title(d.Name).EditorTemplateName("Integer");11. }12. columns.Command(command => { command.Edit(); command.Destroy(); });13. })14. .ToolBar(tb => tb.Create())15. .Selectable()16. .Editable(editable => editable.Mode(GridEditMode.InLine))17. .Pageable()18. .DataSource(datasource => datasource19. .Ajax()20. .Model(21. model =>22. {23. model.Id("ID");24. }25. )26. .PageSize(20)27. .Read(read => read.Action( "Products_Read", "Products"))28. .Update(update => update.Action( "Products_Update", "Products"))29. .Create(create => create.Action( "Products_Create", "Products"))30. .Destroy(destroy => destroy.Action( "Products_Destroy", "Products"))31. )32.)Controller:
01.public class ProductsController : Controller02. {03. public ActionResult Index()04. {05. return View(Models.MockData.PVM);06. }07. 08. public ActionResult Products_Read([DataSourceRequest] DataSourceRequest request)09. {10. IQueryable<Models.Product> ps = Models.MockData.PVM.Products.AsQueryable();11. DataSourceResult result = ps.ToDataSourceResult(request, p => new12. {13. Name = p.Name,14. ID = p.ID,15. OptionIDs = p.OptionIDs16. });17. 18. return Json(result, JsonRequestBehavior.AllowGet);19. }20. 21. public ActionResult Products_Create([DataSourceRequest] DataSourceRequest request, Models.Product product)22. {23. return Json(new[] { product }.ToDataSourceResult(request, ModelState));24. }25. 26. public ActionResult Products_Update([DataSourceRequest] DataSourceRequest request, Models.Product product)27. {28. return Json(new[] { product }.ToDataSourceResult(request, ModelState));29. }30. 31. public ActionResult Products_Destroy([DataSourceRequest] DataSourceRequest request, Models.Product product)32. {33. return Json(new[] { product }.ToDataSourceResult(request, ModelState));34. }35. }