【问题标题】:How to get the selected value from a kendo dropdownlist within a kendo grid?如何从剑道网格中的剑道下拉列表中获取选定的值?
【发布时间】:2013-07-14 05:05:07
【问题描述】:

我有一个启用了批处理编辑的剑道网格,其中包含一个下拉列表。我可以在尝试保存批处理信息时读取网格的其他字段,但很难读取下拉列表的选定值。这是我的网格代码:

  $(document).ready(function () {
            $("#grid").kendoGrid({
                dataSource: datasource,
                navigatable: true,
                pageable: true,
                height: 430,
                sortable: true,
                editable: true,
                selectable: "multiple row",
                groupable: true,
                navigatable: true,
                filterable: true,
                toolbar: ["create", "cancel"],
                columns: [

                    { field: "EmployeeID", title: "Employee ID", width: 110 },
                    { field: "EmployeeName", title: "Employee Name", width: 110 },
                    { field: "Category", title: "Category", editor: categoryDropDownEditor, width: 50 },

                    { command: "destroy", title: "Delete", width: 90 }
                ],



            });
        });

这是下拉列表的代码:

 function categoryDropDownEditor(container, options) {
            $('<input required data-text-field="CategoryName" data-value-field="CategoryID" data-bind="value:' + options.field + '" id="test"/>')
                .appendTo(container)
                .kendoDropDownList({
                    dataTextField: "EmployeeName",
                    dataValueField: "EmployeeID",
                    optionLabel: "Select",
                    autoBind: false,

                    //index: 0,
                    //change: onChange,
                    dataSource: new kendo.data.DataSource( {

                        transport: {
                            read: {
                                url: "/Home/Category",
                                type: "GET"
                            },
                            schema:{
                                model: {
                                    ID: "CategoryID",
                                    Value: "CategoryName"
                                }
                            }
                        }
                    })
                });
        }

这是我试图保存值的代码:

function Save() {


        var EmployeeInfo = { "EmployeeID": "", "EmployeeName": "", "CategoryID": "" };

        var CompanyInfo = { "CompanyID": "", "CompanyName": "", "Employee": [] };

        CompanyInfo.CompanyID = $("#CompanyID").val();
        CompanyInfo.CompanyName = $("#CompanyName").val();

        var drop = $("#test").data("kendoDropDownList");

        var GridData = $("#grid").data("kendoGrid");

        var data = GridData.dataSource.data();
        for (var i = 0; i < data.length; i++) {

            var item = data[i]; //Got the dropdown selected value & text here, just need to assign that value to the CategoryID attribute!
            EmployeeInfo.EmployeeID = item.EmployeeID;
            EmployeeInfo.EmployeeName = item.EmployeeName; 
            EmployeeInfo.CategoryID = item.CategoryID[0];  //Problem is here in assinging data!!
            CompanyInfo.Employee.push(EmployeeInfo);
            EmployeeInfo = { "EmployeeID": "", "EmployeeName": "" };


        }


        $.ajax({
            url: '/Home/Create',
            data: JSON.stringify(CompanyInfo),
            type: 'POST',
            contentType: 'application/json;',
            dataType: 'json'

        });
    };

如何获取下拉列表的选定值?另一个问题是,在下拉列表中选择一个项目后,当我移动到另一行网格时,下拉列表中的选定文本会发生变化,而是显示 [object, object]。请帮忙。谢谢。

【问题讨论】:

  • 我得到了第一个问题的解决方案。它是根据网格的列名进行映射的。所以我需要这样写:EmployeeInfo.CategoryID=item.Category.CategoryID;
  • 现在我需要解决第二个问题。请帮忙。

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


【解决方案1】:

问题是您试图从Save 函数访问 DropDownList,而input 很可能不再存在。您应该像访问其他字段一样简单地访问该字段。 editor 函数会更新字段,因为它是一个 可观察 对象。

尝试做:

for (var i = 0; i < data.length; i++) {
    var item = data[i];
    EmployeeInfo.EmployeeID = item.EmployeeID;
    EmployeeInfo.EmployeeName = item.EmployeeName; 
    EmployeeInfo.CategoryID = item.Category,
    CompanyInfo.Employee.push(EmployeeInfo);
    EmployeeInfo = { "EmployeeID": "", "EmployeeName": "" };
}

顺便说一句,我不确定在将数据发送到服务器之前要进行的处理,但通常人们在DataSource.transport 中使用createupdatedestroy。它用于简化您的开发并让您免于进行ajax 调用。

【讨论】:

  • 我得到了这个问题的解决方案,你能帮我解决我在问题末尾提到的第二个问题吗?在这里,我再次写下这个问题。在下拉列表中选择一个项目后,当我移动到另一行网格时,所选文本在下拉列表中发生更改,改为显示 [object, object]。
  • 是的,我将使用网格的传输属性,我只是在网格中试验下拉。所以我暂时跳过了那部分。无论如何感谢提及。
  • 更加关注您的代码我看到在editor 函数中,当您定义input 字段时,您定义了两次dataTextField。首先是CategoryName,然后是EmployeeName。我不认为这是导致 [object, object] 的原因,但无论如何你都应该修复它。
  • 我正在尝试重现[object, object],但它在我这边工作正常。你能告诉我获得它的确切步骤吗?您的 Grid DataSource 作为类别、类别的名称或 id 发送什么?
  • 好吧,我将 id 和 name 都作为 json 发送!
【解决方案2】:

您可以通过使用 jquery 传递标签名称来获取选定的值。 试试这个

$('#grid select option:selected').val(); // for val


$('#grid select option:selected').text(); // for text

【讨论】:

  • 对不起,它不工作。它仍然没有从下拉列表中获取值。
  • 我在项目中都获得了选定的值和文本,现在我只需要将值分配给 categoryid 字段!我不知道为什么它没有发生?!
  • 我得到了第一个问题的解决方案。它是根据网格的列名进行映射的。所以我需要像下面这样写:EmployeeInfo.CategoryID=item.Category.CategoryID;
【解决方案3】:

当从下拉列表中选择一个值时,在 select 事件中,我们可以得到如下选择的值,

@(Html.Kendo().DropDownList()
              .Name("booksDropDown")
              .HtmlAttributes(new { style = "width:37%" })
              .DataTextField("BookName")
              .DataValueField("BookId")
              .Events(x => x.Select("onSelectBookValue"))
              .DataSource(datasource => datasource.Read(action => action.Action("ReadBookDropDow", "PlanningBook").Type(HttpVerbs.Get)))
              .OptionLabel("Select"))

javascript函数如下,

      function onSelectBookValue(e) {    

                    var dataItem = this.dataItem(e.item.index());
                    var bookId = dataItem.BookId;
//other user code
    }

我相信这会对某人有所帮助

谢谢

【讨论】:

    猜你喜欢
    • 2014-07-09
    • 2018-07-08
    • 2012-07-14
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多