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