Asp.net mvc 剑道网格内联编辑中的多选列表

Asp.net mvc 剑道网格内联编辑中的多选列表,asp.net-mvc,kendo-ui,Asp.net Mvc,Kendo Ui,我需要在剑道网格中使用multiselect列表(内联编辑),以便用户可以从每行列表中选择多个值 以下是我的要求: 在显示时,剑道网格应显示所有选定值的逗号分隔列表 添加时,剑道网格应显示multiselect列表,并允许选择多个值 编辑时,剑道网格应显示具有已选定值的multiselect列表。用户应该能够修改选择和添加/删除列表中的项目 当用户单击update/save按钮时,从multiselect列表中选择的值应该在代码隐藏(在更新ajax操作中)中以及行的id中可用 以下是我目前的工作

我需要在剑道网格中使用multiselect列表(内联编辑),以便用户可以从每行列表中选择多个值

以下是我的要求:

  • 在显示时,剑道网格应显示所有选定值的逗号分隔列表
  • 添加时,剑道网格应显示multiselect列表,并允许选择多个值
  • 编辑时,剑道网格应显示具有已选定值的multiselect列表。用户应该能够修改选择和添加/删除列表中的项目
  • 当用户单击update/save按钮时,从multiselect列表中选择的值应该在代码隐藏(在更新ajax操作中)中以及行的id中可用

    以下是我目前的工作:

    我采取的方法类似于在剑道内联网格中使用下拉列表

    我已经创建了一个编辑器模板,用于在添加/编辑时显示multiselect

    代码如下:

    @model List<Namespace.CompanyConnector>
    @using Kendo.Mvc.UI
    
    @(Html.Kendo().MultiSelectFor(c=>c)
    
          .Name("company_connector_id")
          .DataTextField("connector_name")
          .DataValueField("company_connector_id")
          .Placeholder("Select connector...")
    
                  .AutoBind(false)
                            .Value((List<int>)ViewData["SelectedValues"])
                    .DataSource(source =>
                    {
                        source.Read(read =>
                        {
                            read.Action("GetCompanyConnectors", "BrandConnector");
                        })
                        .ServerFiltering(true);
                    })
               )
    @Html.ValidationMessageFor(m => m)
    
    @型号列表
    @使用Kendo.Mvc.UI
    @(Html.Kendo().MultiSelectFor(c=>c)
    .名称(“公司连接器id”)
    .DataTextField(“连接器名称”)
    .DataValueField(“公司连接器id”)
    .占位符(“选择连接器…”)
    .AutoBind(假)
    .Value((列表)视图数据[“SelectedValues”])
    .DataSource(source=>
    {
    source.Read(Read=>
    {
    读取.操作(“GetCompanyConnectors”、“BrandConnector”);
    })
    .ServerFiltering(true);
    })
    )
    @Html.ValidationMessageFor(m=>m)
    
    说明:我在读取操作中将模型类列表绑定到multiselect和set数据源。为了在编辑时选择所选值,我创建了一个函数,返回所选值的ID,并将其放入read操作中的View数据中

    我在索引页中使用了此编辑器模板,代码如下:

    @{Html.Kendo().Grid<Cee.DomainObjects.DomainObjects.BrandConnector>()
    .Name("BrandConnectorGrid")
    .Filterable()
    .Events(e => e.Edit("onEdit"))
    .DataSource(dataSource => dataSource
    .Ajax()
    .Events(e => e.Error("error_handler").RequestEnd("onRequestEnd"))
    .ServerOperation(false)
    .Model(model =>
    {
      model.Id(p => p.brand_id);
      model.Field(e => e.CompanyConnectorList).DefaultValue(new 
      List<Cee.DomainObjects.DomainObjects.CompanyConnector>());
    })
    .Read(read => read.Action("_AjaxBinding", "BrandConnector",new{companyID = 0 }).Type(HttpVerbs.Post))
    .Update(update => update.Action("_UpdateBinding", "BrandConnector").Type(HttpVerbs.Post)))
                                   .Columns(columns =>
                                   {
                                       columns.Bound(c => c.brand_connector_id).Width(0).Hidden(true);
                                       columns.Bound(c => c.company_id).Width(0).Hidden(true);
                                       columns.Bound(c => c.brand_id).Width(0).Hidden(true);
                                       columns.Bound(u => u.brand_name).Title("Brand").Width("18%").HtmlAttributes(new { @class = "brkWord", @readonly = "readonly" });
                                       columns.ForeignKey(u => u.connector_name, Model.CompanyConnectorList, "company_connector_id", "connector_name").Title("Connector").Width
    
    ("16%").HtmlAttributes(new { @class = "brkWord"     }).EditorTemplateName("company_connector_id");
     columns.Command(p => p.Edit().Text("Edit").HtmlAttributes(new { @title = "Edit" })).Width("16%").Title("Edit");
                                   })
    .Editable(editable => editable.Mode(GridEditMode.InLine).CreateAt(GridInsertRowPosition.Top))
                                .Pageable(pageable => pageable.Refresh(true).PageSizes(GlobalCode.recordPerPageList).ButtonCount(GlobalCode.PageSize).Input(true).Numeric(true))
                                                            .HtmlAttributes(new { @class = "dynamicWidth" })
                                           .Sortable(sorting => sorting.Enabled(true))
                                                            .Render();
                                }
    
    @{Html.Kendo().Grid()
    .名称(“BrandConnectorGrid”)
    .可过滤()
    .Events(e=>e.Edit(“onEdit”))
    .DataSource(DataSource=>DataSource
    .Ajax()
    .Events(e=>e.Error(“错误处理程序”).RequestEnd(“onRequestEnd”))
    .ServerOperation(错误)
    .Model(Model=>
    {
    model.Id(p=>p.brand\u Id);
    model.Field(e=>e.CompanyConnectorList).DefaultValue(新
    列表());
    })
    .Read(Read=>Read.Action(“\u AjaxBinding”,“BrandConnector”,new{companyID=0})。类型(HttpVerbs.Post))
    .Update(Update=>Update.Action(“\u updatebind”,“BrandConnector”).Type(HttpVerbs.Post)))
    .列(列=>
    {
    columns.Bound(c=>c.brand\u connector\u id).Width(0).Hidden(true);
    columns.Bound(c=>c.company_id).Width(0).Hidden(true);
    columns.Bound(c=>c.brand_id).Width(0).Hidden(true);
    columns.Bound(u=>u.brand_name).Title(“brand”).Width(“18%”).HtmlAttributes(新的{@class=“brkWord”,@readonly=“readonly”});
    columns.ForeignKey(u=>u.connector\u name,Model.CompanyConnectorList,“company\u connector\u id”,“connector\u name”)。Title(“connector”)。宽度
    .HtmlAttributes(new{@class=“brkWord”}).EditorTemplateName(“公司连接器id”);
    columns.Command(p=>p.Edit().Text(“Edit”).HtmlAttributes(new{@title=“Edit”})).Width(“16%”).title(“Edit”);
    })
    .Editable(Editable=>Editable.Mode(GridEditMode.InLine).CreateAt(GridInsertRowPosition.Top))
    .Pageable(Pageable=>Pageable.Refresh(true).页面大小(GlobalCode.recordPerPageList).按钮计数(GlobalCode.PageSize).输入(true).数值(true))
    .HtmlAttributes(新的{@class=“dynamicWidth”})
    .Sortable(排序=>sorting.Enabled(true))
    .Render();
    }
    
    说明:我用过ForeignKey。将其绑定到字符串列“connector\u name”。Connector_name是我从控制器发送的以逗号分隔的ID列表。这里使用编辑器模板

    问题:在索引中查看/显示时,它工作正常,但“编辑”不显示选定值。此外,我们不会在单击“更新”时获得代码隐藏中的更新值

    这是实现multiselect list的正确方法,还是需要将集合属性绑定为网格中的列? 如果我将集合属性绑定为列,那么如何在显示时显示逗号分隔的字符串?

    试试:

    c.Bound(p=>p.CompanyConnectorList).ClientTemplate(“#=connectorsToString(data)#”).EditorTemplateName(“company#connector#id”)

    和js:

    function connectorsToString(data) {
            var list = data.company_connector_id;
            var result = "";
            for (var i = 0; i < list.length; i++) {
                result += list[i].Name + ';'; 
            }
            return result;
        }
    
    函数连接器到字符串(数据){
    var list=data.company\u connector\u id;
    var结果=”;
    对于(变量i=0;i

    尝试以下代码:

    function onEdit(e) {
    
     var multiselect = $("#YourMutliselectDropdown").data("kendoMultiSelect");
    
                var IDArray = [];
    
                $(e.model.propertyName).each(function (index) {
                    var ID = e.model.propertyName[index].id;
                    IDArray.push(ID);
                });    
    
                multiselect.value(IDArray);
    
    
    }
    

    我假设
    propertyName
    是您收藏的列表,它包含
    id
    作为属性。

    您好,谢谢您的回复。我可以在屏幕上显示逗号分隔的字符串,但在网格中单击“编辑”按钮时,无法在“多选”列表中获取选定值。此外,我无法在submitadd Evento上获取网格的代码隐藏上的选定值:。事件(e=>e.Save(“saveConnectors”))和JS:function saveConnectors(data){data.model.CompanyConnectorList=data.model.company_connector_id;}