#model-view-controller #kendo-ui #model #wrapper #treelist
#модель-представление-контроллер #kendo-ui #Модель #оболочка #список дерева
Вопрос:
Мне трудно понять, как иерархия привязана к списку деревьев. Мы пытаемся добиться редактирования в CELL, но я не могу этого сделать, используя HTML-оболочки MVC.
Пожалуйста, помогите мне с рабочим решением, поскольку на веб-сайте 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; }
}
Ожидается, что список деревьев будет заполнен классом модели и будет иметь возможность создавать дочерние элементы в загруженных элементах.
Ответ №1:
Ответ получен от команды поддержки Progress Telerik. Делюсь разрешением здесь в ожидании, что это может помочь любым будущим читателям.
И еще — Возможно, проблема, с которой я столкнулся, заключается в том, что в списке деревьев нет данных. Причина в том, что родительский идентификатор не обнуляется и что нет корневых элементов — элементов с родительским идентификатором, который равен null. Внося следующие два изменения, я могу видеть, что список деревьев отображается правильно:
Модель, которая привязана к списку деревьев:
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()
});