【问题标题】:Reference to Kendo UI (ASP.NET MVC) dropdown on a grid参考网格上的 Kendo UI (ASP.NET MVC) 下拉菜单
【发布时间】:2014-02-06 22:51:56
【问题描述】:

我正在使用带有 Kendo UI 和 Jquery 的 ASP.NET MVC 3。

这与我之前提出的问题相似,但不一样。

我有一个 Kendo UI 网格,这个网格上有一个下拉菜单。所以每一行都有一个下拉菜单。我想遍历网格的每一行并将所有值设置为指定值。 Kendo 下拉菜单有一些方法可以让我获取和设置下拉菜单的值,但是我在获取下拉菜单的引用时遇到了问题,因此我可以使用这些 get 和 set 方法(在网格的上下文中)。

这是我的网格的样子:

Html.Kendo()
.Grid<MyProject.Models.Domain.Students>()
.Name("Students")
.Sortable(settings => settings.Enabled(false))
.Filterable(settings => settings.Enabled(false))
.Resizable(resizing => resizing.Columns(true))
.Scrollable(settings => settings.Enabled(true))     
.HtmlAttributes(new { style = "font-size: 85%;" })
.Columns(columns =>
    {
        columns.Bound(o => o.StudentId).Title("StudentId").Hidden();
        columns.Bound(o => o.Name).Title("Student Name").Width(200);
        columns.Bound(o => o.teacher).Title("Teacher")
            .ClientTemplate("#=data.teacher ? teacher.teacherName : ''#")
            .Width(150)
            .Filterable(false);
    })
    .DataSource(dataSource => dataSource
        .Ajax()
        .Batch(true)
        .ServerOperation(false)
        .Model(model =>
        {
            model.Id(c => c.StudentId);
            model.Field(c => c.teacher);                                                       
        })
        .Events(events => events.Error("Field_onError"))
        .Read(read => read.Action("_AjaxGetFields", "Student"))
        .Update("_AjaxUpdateFields", "Student")
        .Destroy("_AjaxDelFields", "Student"))
        .Events(events => 
            events
                .DataBound("Fields_onDataBound")
                .Change("onFieldSelect")
                .Edit("onFieldEdit")
        )
        .ToolBar(commands =>
        {
            commands.Save().HtmlAttributes(new { id = "saveField" }); 
        })
        .Scrollable(scrollable => scrollable.Height("375px"))
        .Selectable()
        .Editable(editing =>
            editing.Mode(Kendo.Mvc.UI.GridEditMode.InCell)
        ).Render();

这是下拉列的模板:

@(Html.Kendo().DropDownList()
.Name(ViewData.TemplateInfo.GetFullHtmlFieldName(string.Empty))
.DataValueField("TeacherId")       
.DataTextField("TeacherName")
.DataSource(source =>
{
    source.Read(read =>
    {
        read
            .Action("_SelectTeacherList","Teacher")
            .Data("onTeacherDataBinding");
    })
    .ServerFiltering(true);
})
.Events(e => e           
    .Change("dropdownlist_change")
)

)

这里是我在 jquery 脚本中迭代网格行的地方:

$("#fieldDef tr:has(td)").each(function ()
{
     //HERE IS WHERE I WANT TO REFERENCE THE DROP DOWN FOR THE CURRENT GRID ROW
    // I WANT TO SET EACH DROPDOWN TO A SPECIFIED VALUE HERE
}

那么我怎样才能在网格中获得对这个下拉菜单的引用呢?一旦我得到参考,我可以使用所有的剑道方法来设置它。 Kendo 文档向我们展示了如何获取对下拉列表的引用,但不是当它在网格内时。

【问题讨论】:

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


    【解决方案1】:

    可以使用网格的edit事件:

    .Events(events => events.Edit("edit"))
    
    <script>
    function edit(e) {
     var ddl = e.container.find("[data-role=dropdownlist]").data("kendoDropDownList");
    }
    </script>
    

    【讨论】:

    • 如果有两个或更多的下拉菜单?有没有办法提供二级过滤器?
    • 是的:var ddl = e.container.find("[data-role=dropdownlist]").eq(2).data("kendoDropDownList");
    【解决方案2】:

    您可以在迭代器中使用 jQuery closest 函数:

    $(this).closest("[data-role=dropdownlist]").data("kendoDropDownList");
    

    【讨论】:

    • 感谢您的帮助。我无法得到这个工作。它一直返回未定义。我不知道为什么,但我确实得到了 Atanas 提供的其他解决方案。
    猜你喜欢
    • 2023-03-25
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多