Как связать TreeList с классом модели MVC с помощью оболочек MVC - PullRequest
1 голос
/ 26 марта 2019

Мне трудно понять, как иерархия связана в TreeList. Мы пытаемся добиться редактирования InCell, и я не могу сделать это, используя обертки HTML MVC.

Пожалуйста, помогите мне с рабочим решением, так как решение на веб-сайте Как не дает представление о том, как работает схема БД, и я не могу отладить ее, чтобы понять, как структурировать модель.

  1. https://docs.telerik.com/aspnet-mvc/helpers/treelist/editing

Фрагменты кода: надеюсь, это поможет:

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; }


    }

Ожидается, что TreeList будет заполнен классом Model и сможет создавать дочерние элементы в загруженных элементах.

1 Ответ

0 голосов
/ 27 марта 2019

Ответ команды поддержки Progress Telerik.Разделение разрешения здесь в ожидании того, что оно может помочь любым будущим читателям.

Ответ - Возможно, проблема, с которой я столкнулся, заключается в том, что в TreeList нет данных.Причина в том, что ParentId не имеет значения NULL и что нет корневых элементов - элементов с нулевым ParentId.Внося следующие два изменения, я могу видеть, что TreeList отображается правильно:

Модель, которая связана с TreeList:

public class OrderInputsViewModel
 {
   //Parent Id
   **public int? OrderItemId { get; set; }**               

Метод, который возвращает данные (фиктивный / статический):

returnData.Add(new MaterialViewModel {
   OrderId =i + 1 ,
   OrderItemId = i % 2 == 0 ? (10 * (i + 1)) + (i + 1) 
**: (int?)null**,
   OrderSubItemId = (100 * (i + 1)) + (i + 1),
   OrderDate = DateTime.Now,
   WBS = "ABC" + (i + 1).ToString(),
   Description = "Description " + (i + 1).ToString()
});

...