Telerik Kendo Grid无法正确显示价值

时间:2019-09-25 02:45:53

标签: asp.net-mvc asp.net-core kendo-ui kendo-grid telerik-grid

我是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"])
)

Edit Mode
DisplayMode / Out of Product Edit Mode

2 个答案:

答案 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();