Model view controller 如何使用MVC包装器将树列表绑定到MVC模型类
我发现很难理解树列表中的层次结构是如何绑定的。我们正在尝试实现InCell编辑,但我无法使用htmlmvc包装器来实现 请帮助我解决工作中的问题,因为How-to网站上的解决方案没有提供关于DB模式如何运行的见解,我无法调试它以了解如何构建模型 代码片段:我希望这有助于: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>()
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; }**
返回数据的方法(虚拟/静态):