微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Kendo MultiSelect 未在 Kendo Grid 弹出窗口中呈现

如何解决Kendo MultiSelect 未在 Kendo Grid 弹出窗口中呈现

我正在尝试在带有 ASP.NET MVC 的 Kendo Grid 中使用 Kendo MultiSelect。 我并不特别需要带有 MultiSelect 的列在网格中可见,但我需要能够在弹出视图中对其进行编辑。 当网格加载时,带有 MultiSelect 的列具有 [object Object] 的值,当我单击编辑打开弹出窗口时,MultiSelect 根本不显示在弹出窗口中。 当我将网格的编辑模式更改为 inline 或 incell 并按编辑时,MultiSelect 出现在列中,其中包含数据库中每个对象的正确预选值以及 ViewData 中正确的有界值列表。 我不知道我做错了什么。

这是我的代码

视图模型:

public class QMkeyvM
{  
    [HiddenInput(displayValue = false)]
    public int Id { get; set; }

    [StringLength(100)]
    public string Code { get; set; }

    [StringLength(255)]
    public string Title { get; set; }

    [UIHint("Enum")]
    public ScopeType Scope { get; set; }

    [UIHint("InstituteTypes_MultiSelect")]
    public List<InstituteTypeVM> InstituteTypes { get; set; }        
}


public class InstituteTypeVM
{
    public int Id { get; set; }

    public string Name { get; set; }
}

MultiSelect 的编辑器模板文件 InstituteTypes_MultiSelect.cshtml:

@(Html.Kendo().MultiSelect()
    .Name("InstituteTypes")
    .DataValueField("Id")
    .DataTextField("Name")
    .Filter("contains")
    .HtmlAttributes(new { style = "width:250px;height:50px" })
    .BindTo((IEnumerable<InstituteTypeVM>)ViewData["InstituteTypes"])
    .HtmlAttributes(new { data_value_primitive = false })

)

视图中的网格:

@(Html.Kendo().Grid<QMkeyvM>()
.Name("qmkeysGrid")
.Columns(columns =>
{
    columns.Bound(p => p.Id).Hidden();
    columns.Bound(p => p.Code);
    columns.Bound(p => p.Title);   
    columns.Bound(p => p.Scope).EditorTemplateName("Enum");
    columns.Bound(p => p.InstituteTypes).EditorTemplateName("InstituteTypes_MultiSelect");
})
.Pageable(p =>
{
    p.Messages(m => m.Page("Page").Empty("No entries").ItemsPerPage("per page").display("{0} to {1} from {2}"));
    p.Refresh(true);
    p.Input(true);
    p.PageSizes(new int[] { 20,50,100,200 });
})
.ClientDetailTemplateId("qmkeydetailtemplate")
.sortable().Groupable(g => g.Messages(m => m.Empty("Grouping")))
.Scrollable(s => s.Height("auto"))
.Resizable(resize => resize.Columns(true))
.ToolBar(tools => tools.Excel())
.Excel(excel => excel
    FileName("qmkeys.xlsx")
    .Filterable(true)
    .ProxyURL(Url.Action("Excel_Export_Save","Grid"))
)
.Filterable(filterable => filterable
    .Extra(false)
    .Operators(operators => operators
        .ForString(str => str.Clear()
            .Contains("Contains")
        )
        .ForDate(dr => dr.Clear().IsEqualTo("ForDate"))
        ).Messages(m => m.Filter("Apply Filter").Clear("Clear Filter").Info("")))
.ToolBar(toolbar =>
{
    toolbar.Create().Text("Add qmkey");
    toolbar.Custom().Text("Add Section").HtmlAttributes(new { id = "addSectionsBtn" });
    toolbar.Custom().Text("Add Subsection").HtmlAttributes(new { id = "addSectionGroupsBtn" });
})
.Editable(editable => editable.Mode(GridEditMode.PopUp)
.Window(w => w.Title("Edit").Resizable().Draggable(true).Width(700))
.displayDeleteConfirmation("Confirm Delete"))
.Events(e => e.Edit("onEdit"))
.DataSource(dataSource => dataSource
    .Ajax().ServerOperation(false)
    .PageSize(200)
    .Read(read => read.Action("qmkeysRead","qmkeys"))
    .Create(create => create.Action("qmkeyCreate","qmkeys"))
    .Update(update => update.Action("qmkeyUpdate","qmkeys"))
    .Destroy(destroy => destroy.Action("qmkeyDelete","qmkeys"))
    .Events(events => events.Error("GridOnError").RequestEnd("qmkeysGrid_OnRequestEnd"))
    .Model(model =>
    {
        model.Id(p => p.Id);
    })
).AutoBind(true).Deferred())

非常感谢。

解决方法

尝试放置 Datasource 属性以从 Database 获取数据 以下代码将帮助您:

@(Html.Kendo().MultiSelect()
        .Name("multiselect")
        .DataTextField("ProductName")
        .DataValueField("ProductID")
        .Value(new[] { 2,7 })
        .DataSource(source =>
        {
            source.Read(read =>
            {
                read.Action("Products_Read","Home");
            })
            .ServerFiltering(true);
        })
    )

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。