【问题标题】:Kendo grid error : kendo.all.min.js:12 Uncaught TypeError: e.slice is not a function剑道网格错误:kendo.all.min.js:12 Uncaught TypeError: e.slice is not a function
【发布时间】:2015-10-14 14:41:53
【问题描述】:

我有一个剑道网格,它使用来自 javascript 的 ajax 绑定其数据源,如下所示:

剑道格:

@(Html.Kendo().Grid<WEB02.ConfigurationModel.ActivityGridDetails>()
.Name("Activitydet")
.Columns(columns =>
{
    columns.Bound(o => o.Id).Width(40);
    columns.Bound(o => o.Config).Width(200);
    columns.Bound(o => o.Status).Width(250);
    columns.Bound(o => o.In).Width(250);
    columns.Bound(o => o.Out).Width(250);




})
.DataSource(dataSource => dataSource
    .Ajax()
    .Events(events => events.Error("error_handler"))
     .Model(model => model.Id(p => p.Id))
    )
)
)

Javascript:

function onChange(e) {
    var grid = $("#grid").data("kendoGrid");
    var dataRows = grid.items();
    var rowIndex = dataRows.index(grid.select());
    var selectedname = grid.dataItems()[rowIndex];
    console.log("aly" + selectedname.NodeId);
    document.getElementById("ActivityGrid").style.bottom = "100px";



    $.ajax({

        type: 'POST',
        url: '/Configuration/ActivityGridDisplay/',
        dataType: 'json',
        data: { nodeName: selectedname.Name, nodeType: selectedname.Type, nodeID: selectedname.NodeId },
        success: function (result) {

            $("#Activitydet").data("kendoGrid").dataSource.data(result);
            //$("#Activitydet").data("kendoGrid").dataSource.fetch();
        }
    })}

控制器:

public ActionResult ActivityGridDisplay([DataSourceRequest] DataSourceRequest request, string nodeName, string nodeType, string nodeID)

    {



        ActivityGrid Activity = new ActivityGrid();
        Activity.Grid = new DataTable();

        string rep = "ns=2;s=";
        nodeID = nodeID.Replace(rep, "");

        string nodeConfig= nodeID+".CONFIG";
        string nodeStatus= nodeID+".STATUS";
        string nodeIN= nodeID+".IN";
        string nodeOUT= nodeID+".OUT";
        Dictionary<string, string> ActivityConfig = RxMUaClient.DetailsBrowse("2", "127.0.0.1:48030", nodeConfig);
        Dictionary<string, string> ActivityStatus = RxMUaClient.DetailsBrowse("2", "127.0.0.1:48030", nodeStatus);
        Dictionary<string, string> ActivityIN = RxMUaClient.DetailsBrowse("2", "127.0.0.1:48030", nodeIN);
        Dictionary<string, string> ActivityOUT = RxMUaClient.DetailsBrowse("2", "127.0.0.1:48030", nodeOUT);


        List<Dictionary<string, string>> Collection = new  List<Dictionary<string, string>>();
        Collection.Add(ActivityConfig);
        Collection.Add(ActivityStatus);
        Collection.Add(ActivityIN);
        Collection.Add(ActivityOUT);

        int max =Collection[0].Count;
        for (int CC = 1; CC < 4; CC++)
        {

            if (Collection[CC].Count > max)
            {
                max = Collection[CC].Count;
            }
        }
        DataTable Table = new DataTable();
        Table.Columns.Add("Id");
        Table.Columns.Add("Config");
        Table.Columns.Add("Status");
        Table.Columns.Add("In");
        Table.Columns.Add("Out");
        for (int i = 0; i <= max; i++)
        {
            DataRow newRow = Table.NewRow();
            newRow[0] = i;

            int l=1;
                foreach (Dictionary<string, string> e in Collection)
                {

                    if (i < e.Count)
                    {
                        var element = e.ElementAt(i);
                        newRow[l] = element.Value;
                    }
                    l++;

                }
                Table.Rows.Add(newRow);

        }



        if (request.Aggregates.Any())
        {
            request.Aggregates.Each(agg => agg.Aggregates.Each(a =>
            {
                a.MemberType = Table.Columns[agg.Member].DataType;
            }));
        }
        return Json(Table.ToDataSourceResult(request));

}

我之前使用模型完成了相同的网格,但是直接从剑道网格中使用读取功能,它曾经可以正常工作。这次使用 ajax 绑定读取不起作用,因为它给出了这个错误: kendo.all.min.js:12 Uncaught TypeError: e.slice is not a function

我试图将allowget放到json调用中但没有解决它,我之前没有设置模型ID,所以我设置了一个也没有解决它。我试图从剑道网格中删除数据源部分,但没有这样做。有什么建议??

【问题讨论】:

    标签: javascript json ajax asp.net-mvc kendo-grid


    【解决方案1】:

    发现问题:在传递整个数据时,它在javascript部分,而应该只传递数据数组部分:

    要改的ajax函数如下:

     $.ajax({
    
            type: 'POST',
            url: '/Configuration/ActivityGridDisplay/',
            dataType: 'json',
            data: { nodeName: selectedname.Name, nodeType: selectedname.Type, nodeID: selectedname.NodeId },
            success: function (result) {
                console.log(result);
                var pass = result.Data;
                $("#Activitydet").data("kendoGrid").dataSource.data(pass);
                //$("#Activitydet").data("kendoGrid").dataSource.fetch();
            }
        })
    

    【讨论】:

      【解决方案2】:

      使用 $("#grid").kendoGrid 遇到了同样的问题,并通过将 'data' 属性放入控制器中解决了它。 例如: 返回 Json(results.Data, JsonRequestBehavior.AllowGet);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-17
        • 2023-02-17
        • 1970-01-01
        • 1970-01-01
        • 2017-07-22
        • 1970-01-01
        • 1970-01-01
        • 2014-08-15
        相关资源
        最近更新 更多