我是Kendo UI的新手,目前正在学习有关自定义编辑器的知识。 我的问题是我设法使我的编辑器模板在编辑模式下工作,并且可以很好地填充数据,但是以某种方式它无法将值保存到显示网格中
我从API检索我的所有数据。
更新: 我已经设法将自定义编辑器模板中的值正确保存到控制器,并且可以正常工作,但是使用clientTemplate不能从下拉菜单中显示正确的值,而仅显示字符串
DropDown Only Display A String
我的设置代码是这样的
@( Html.Kendo().Grid<SalesOrderDetailVM>()
.Name("list-detail")
.Columns(columns =>
{
columns.Bound(c => c.Product).ClientTemplate("\\#=Product.ProductId\\#").Title("Products");
columns.Bound(c => c.Quantity);
columns.Bound(c => c.UnitPrice);
})
.Editable(GridEditMode.InCell)
.ToolBar(tool =>
{
tool.Create();
tool.Save();
}
)
.DataSource(dataSource => dataSource
.Ajax()
.ServerOperation(false)
.Batch(true)
.Model(model =>
{
model.Id(p => p.ProductId);
model.Field(p => p.Product);
})
.Create(act => act.Action("DetailCell_Create","SalesOrder"))
)
)
DDLProduct.cshtml:
@model AAF.WEB.MVC.ViewModels.ProductVM
@(
Html.Kendo().DropDownListFor(m => m)
.DataValueField("ProductId")
.DataTextField("ProductName")
.OptionLabel("Select Product")
.BindTo((System.Collections.IEnumerable)ViewData["products"])
)
答案 0 :(得分:0)
使用模板方法通过剑道网格实现下拉菜单。
GridForeignKey.cshtml-应该放置在共享文件夹或EditorTemplates中 @model对象
@(
Html.Kendo().DropDownListFor(m => m)
.BindTo((SelectList)ViewData[ViewData.TemplateInfo.GetFullHtmlFieldName("") + "_Data"])
)
在剑道网格中,请进行如下更改
@( Html.Kendo().Grid<AAF.WEB.MVC.ViewModels.SalesOrderDetailVM>()
.Name("list-detail")
.Columns(columns =>
{
columns.Bound(c => c.Id)
columns.ForeignKey(c => c.ProductId, (System.Collections.IEnumerable)ViewData["Products"], "ProductId", "ProductName").Title("Products");
columns.Bound(c => c.Quantity);
columns.Bound(c => c.UnitPrice);
})
.Editable(GridEditMode.InCell)
.ToolBar(tool =>
{
tool.Create();
tool.Save();
}
)
.DataSource(dataSource => dataSource
.Ajax()
.ServerOperation(false)
)
)
您可以设置产品数据以查看数据。使用此方法可以保存产品ID。
谢谢
答案 1 :(得分:0)
好吧,我挫败了许多小时之后,终于找到了解决方法
解决方案是在网格中为传递的模型添加一个默认值
.Model(model =>
{
model.Id(p => p.ProductId);
model.Field(p => p.Product).DefaultValue(
ViewData["defaultProduct"] as ProductVM
);
})
并从控制器传递数据
// Function that get data from API
ViewData["products"] = products;
ViewData["defaultProduct"] = products.First();