在MVC的局部视图中制作可编辑的Kendo网格

时间:2016-02-08 12:13:06

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

我希望将可编辑的kendo网格作为部分视图控件,以便在需要时多次使用它。

我的客户和员工有多个地址 所以我想在局部视图中为地址制作可编辑的kendo网格,以便在员工和客户中使用它。

我对kendo网格的部分视图是

    @model AddressesModel
@using Kendo.Mvc.UI


@{
    var prefix = ViewData.TemplateInfo.HtmlFieldPrefix;
    var propertyPrefixName = "";
    if (string.IsNullOrEmpty(prefix))
    {
        propertyPrefixName = nameof(AddressesModel.AddressesList);
    }
    else
    {
        propertyPrefixName = prefix + "." + nameof(AddressesModel.AddressesList);
    }
    var cityId = nameof(AddressModel.CityId);
    var email = nameof(AddressModel.Email);

}

@(Html.Kendo().Grid(Model.AddressesList)
              .Name("AddressGrid")
              .ToolBar(tools => tools.Create().Text(GlobalResources.Add))
              .Editable(editable
              => editable.Mode(GridEditMode.InCell).CreateAt(GridInsertRowPosition.Bottom))
              .Columns(columns =>
              {


                  columns.Bound(p => p.CityId).ClientTemplate("#= " + cityId + " #" +
                  "<input type='hidden' name='" + propertyPrefixName + "[#= index(data)#]." + cityId + "' value='#= " + cityId + " #' />"

                       );

                  columns.Bound(p => p.Email).ClientTemplate("#= " + email + " #" +
                    "<input type='hidden' name='" + propertyPrefixName + "[#= index(data)#]." + email + "' value='#= " + email + " #' />"
                  );


                  columns.Command(command => command.Destroy()).Width(20).Title(GlobalResources.Delete);
              })
              .DataSource(dataSource => dataSource.Ajax()
                   .Model(model =>
                   {
                       model.Id(p => p.Id);
                       model.Field(p => p.Id).Editable(false);
                   })
                   .ServerOperation(false)
              )
)





<script>

    function index(dataItem) {

        var data = $("#AddressGrid").data("kendoGrid").dataSource.data();
        return data.indexOf(dataItem);
    }

</script>

并且在员工视图中我使用了这样的

@Html.Partial("_AddressesGrid", Model.Addresses, new ViewDataDictionary { TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix =nameof(CreateEmployeeModel.Addresses)} })

当我编辑电子邮件时,我有这个错误 enter image description here

它没有编辑!

请帮忙,我如何在局部视图中制作可编辑的剑道网格!!

请注意,如果我将kendo网格放在没有局部视图的员工视图中,它就能正常工作。

1 个答案:

答案 0 :(得分:0)

更改

@Html.Partial("_AddressesGrid", Model.Addresses, new ViewDataDictionary { TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix =nameof(CreateEmployeeModel.Addresses)} })

@Html.Partial("_AddressesGrid", Model.Addresses)

小心不要使用HtmlFieldPrefix,kendo会使编辑器单元格模板出现错误名称,这样我就会出现上述错误