Model view controller 如何使用MVC包装器将树列表绑定到MVC模型类

Model view controller 如何使用MVC包装器将树列表绑定到MVC模型类,model-view-controller,kendo-ui,model,wrapper,treelist,Model View Controller,Kendo Ui,Model,Wrapper,Treelist,我发现很难理解树列表中的层次结构是如何绑定的。我们正在尝试实现InCell编辑,但我无法使用htmlmvc包装器来实现 请帮助我解决工作中的问题,因为How-to网站上的解决方案没有提供关于DB模式如何运行的见解,我无法调试它以了解如何构建模型 代码片段:我希望这有助于: Html Markup: @(Html.Kendo().TreeList<ABC.Areas.COManager.ViewModels.MaterialViewModel>()

我发现很难理解树列表中的层次结构是如何绑定的。我们正在尝试实现InCell编辑,但我无法使用htmlmvc包装器来实现

请帮助我解决工作中的问题,因为How-to网站上的解决方案没有提供关于DB模式如何运行的见解,我无法调试它以了解如何构建模型

  • 代码片段:我希望这有助于:

    Html Markup:
    
    
    @(Html.Kendo().TreeList<ABC.Areas.COManager.ViewModels.MaterialViewModel>()
                                                  .Name("treelist")
                      .Toolbar(toolbar =>
                      {
                                                                                              //toolbar.Create().Name("Add Item to order");
                                                                                              toolbar.Save();
                          toolbar.Cancel();
                      })
             .Columns(columns =>
             {
                 columns.Add().Field(e => e.OrderItemId).Title("Item id").Expandable(true);//.Width(220);
                                                                                     columns.Add().Field(e => e.OrderSubItemId).Title("Sub item id");//.Width(220);
                                                                                     columns.Add().Field(e => e.WBS).Title("WBS");//.Width(220);
                                                                                     columns.Add().Field(e => e.Rate).Title("Rate");//.Width(100);
                                                                                     columns.Add().Field(e => e.Hours);
                 columns.Add().Field(e => e.CostAmount).Title("Cost Amount").Format("{0:C2}");
                 columns.Add().Command(c =>
                 {
                     c.CreateChild().Text("Add Item detail");
                     c.Destroy();
                 }
    );//.Width(240);
                                                                                 })
    .Events(ev => ev.DataBound("onDataBound"))
    .Editable(e => e.Mode(TreeListEditMode.InCell))
    .DataSource(dataSource => dataSource
    .Batch(true)
    .Read(read => read.Action("All_InCell", "OrderInputs"))
    .Create(create => create.Action("Create_InCell", "OrderInputs").Type(HttpVerbs.Post))
    .Update(update => update.Action("Update_InCell", "OrderInputs").Type(HttpVerbs.Post))
    .Destroy(delete => delete.Action("Destroy_InCell", "OrderInputs").Type(HttpVerbs.Post))
    .Model(m =>
    {
    m.Id(f => f.OrderSubItemId);
    m.ParentId(f => f.OrderItemId);
    //m.Expanded(true);
    m.Field(f => f.OrderId);
    m.Field(f => f.OrderItemId);
    m.Field(f => f.OrderSubItemId);
    m.Field(f => f.WBS);
    m.Field(f => f.Rate);
    m.Field(f => f.Hours);
    m.Field(f => f.CostAmount).DefaultValue(0);
    })
    )
                    //.Height(540)
    
            )
    
    
    
    Controller action for read:
    
    public JsonResult All_InCell([DataSourceRequest] DataSourceRequest request)
            {
                var result = GetDirectory().ToTreeDataSourceResult(request,
                    e => e.OrderSubItemId,
                    e => e.OrderItemId,
                    e => new MaterialViewModel
                    {
                        OrderItemId = e.OrderItemId,
                        OrderId = e.OrderId,
                        OrderSubItemId = e.OrderSubItemId,
                        OrderDate = e.OrderDate,
                        hasChildren = false
                    }
                );
    
                return Json(result, JsonRequestBehavior.AllowGet);
            }
    
    
    
    Gets the Data:
    
    private IEnumerable<MaterialViewModel> GetDirectory()
            {
                return employeeDirectory.GetAll();
            }
    
    
    
    Returns the data (Dummy/Static): Could this be the problem? I am unsure.
    
    
       internal IEnumerable<MaterialViewModel> GetAll()
            {
                var returnData = new List<MaterialViewModel>();
                for (var i = 0; i <= 10; i++)
                {
                    returnData.Add(new MaterialViewModel { OrderId = i + 1, OrderItemId = (10 * (i + 1)) + (i + 1), OrderSubItemId = (100 * (i + 1)) + (i + 1), OrderDate = DateTime.Now, WBS = "ABC" + (i + 1).ToString(), Description = "Description " + (i + 1).ToString(),  });
                }
                return returnData;
            }
    
    
    
    
    Model:
    
    MaterialViewModel
    
    
    public class MaterialViewModel: OrderInputsViewModel
        {
            public string WBS { get; set; }
    
            public string Description { get; set; }
    
            public double Rate { get; set; }
    
            public int Hours { get; set; }
    
            public double CostAmount { get; set; }
        }
    
    
    
    Model:
    
    OrderInputsViewModel
    
    
        public class OrderInputsViewModel
        {
            //[ScaffoldColumn(false)]
            public int? OrderId { get; set; }
    
            //[ScaffoldColumn(false)]
            public int OrderItemId { get; set; }
    
            public int OrderSubItemId { get; set; }
    
            public DateTime OrderDate { get; internal set; }
    
            //[ScaffoldColumn(false)]
            public bool hasChildren { get; set; }
    
    
        }
    
    Html标记:
    @(Html.Kendo().TreeList())
    .名称(“树名”)
    .Toolbar(Toolbar=>
    {
    //toolbar.Create().Name(“将项目添加到订单”);
    toolbar.Save();
    toolbar.Cancel();
    })
    .列(列=>
    {
    columns.Add().Field(e=>e.OrderItemId).Title(“Item id”).Expandable(true);//.Width(220);
    columns.Add().Field(e=>e.OrderSubItemId).Title(“子项id”);/.Width(220);
    columns.Add().Field(e=>e.WBS.Title(“WBS”);/.Width(220);
    columns.Add().Field(e=>e.Rate).Title(“Rate”);/.Width(100);
    columns.Add().Field(e=>e.Hours);
    columns.Add().Field(e=>e.CostAmount).Title(“成本金额”).Format(“{0:C2}”);
    columns.Add()命令(c=>
    {
    c、 CreateChild().Text(“添加项目详细信息”);
    c、 破坏();
    }
    )//宽度(240);
    })
    .Events(ev=>ev.DataBound(“onDataBound”))
    .Editable(e=>e.Mode(TreeListEditMode.InCell))
    .DataSource(DataSource=>DataSource
    .Batch(真)
    .Read(Read=>Read.Action(“所有输入”、“订单输入”))
    .Create(Create=>Create.Action(“Create_InCell”,“OrderInputs”).Type(HttpVerbs.Post))
    .Update(Update=>Update.Action(“Update_InCell”,“OrderInputs”).Type(HttpVerbs.Post))
    .Destroy(delete=>delete.Action(“Destroy_InCell”,“OrderInputs”).Type(HttpVerbs.Post))
    .Model(m=>
    {
    m、 Id(f=>f.OrderSubItemId);
    m、 ParentId(f=>f.OrderItemId);
    //m、 扩展(真);
    m、 字段(f=>f.OrderId);
    m、 字段(f=>f.OrderItemId);
    m、 字段(f=>f.OrderSubItemId);
    m、 字段(f=>f.WBS);
    m、 字段(f=>f.Rate);
    m、 字段(f=>f.Hours);
    m、 字段(f=>f.CostAmount).DefaultValue(0);
    })
    )
    //.高度(540)
    )
    控制器读取操作:
    public JsonResult All_InCell([DataSourceRequest]DataSourceRequest请求)
    {
    var result=GetDirectory().ToTreeDataSourceResult(请求,
    e=>e.OrderSubItemId,
    e=>e.OrderItemId,
    e=>新材料视图模型
    {
    OrderItemId=e.OrderItemId,
    OrderId=e.OrderId,
    OrderSubItemId=e.OrderSubItemId,
    OrderDate=e.OrderDate,
    hasChildren=false
    }
    );
    返回Json(结果,JsonRequestBehavior.AllowGet);
    }
    获取数据:
    私有IEnumerable GetDirectory()
    {
    返回employeeDirectory.GetAll();
    }
    返回数据(虚拟/静态):这可能是问题所在吗?我不确定。
    内部IEnumerable GetAll()
    {
    var returnData=新列表();
    
    对于(var i=0;i,由Progress Telerik支持团队回答。在此分享该解决方案,以期对未来的读者有所帮助

    Ans-可能我遇到的问题是树列表中没有数据。原因是ParentId不可为null,并且没有根项-ParentId为null的项。 通过以下两个更改,我可以看到树列表正确渲染:

    绑定到树列表的模型:

    public class OrderInputsViewModel
     {
       //Parent Id
       **public int? OrderItemId { get; set; }**               
    
    
    返回数据的方法(虚拟/静态):


    由Progress Telerik支持团队回答。在此分享该决议,期望它能帮助未来的读者

    Ans-可能我遇到的问题是树列表中没有数据。原因是ParentId不可为null,并且没有根项-ParentId为null的项。 通过以下两个更改,我可以看到树列表正确渲染:

    绑定到树列表的模型:

    public class OrderInputsViewModel
     {
       //Parent Id
       **public int? OrderItemId { get; set; }**               
    
    
    返回数据的方法(虚拟/静态):