javascript - KendoGrid分页有 "undefined"和 "NaN"

标签 javascript jquery asp.net-mvc google-chrome kendo-grid

目前我正在尝试向 Kendo 网格添加分页。以下是完整的错误消息:

Error in event handler for (unknown): TypeError: Cannot read property 'url' of null
    at Object.tinyFilter.start (chrome-extension://nlfgnnlnfbpcammlnibfkplpnbbbdeli/site.js:61:43)
    at chrome-extension://nlfgnnlnfbpcammlnibfkplpnbbbdeli/site.js:137:16

这是我的 Controller 中的代码:

    public ActionResult ExecuteRule(string ruleId, string ruleSql, List<MatchRuleParam> parameters = null)
    {
        if (Request.Url != null)
        {
            var query = PaginationQuery.Parse(Request.QueryString);
            var upperLimit = query.FromUpper;
            var lowerLimit = query.FromLower;
            var dataSource = new MatchDataSource();
            var results = dataSource.ExecuteTestRule(ruleId, ruleSql, parameters, upperLimit, lowerLimit).Select(k => new { KEY = k });
            var response = new Dictionary<string, object>();
            response["result"] = results;
            response["rowCount"] = MatchDataSource.GetRowCount(ruleId, ruleSql, parameters);

            return Json(response, JsonRequestBehavior.AllowGet);
        }
        return null;
    }

当我尝试在下面的 url 行上的 chrome 中放置断点时,它不会在我的 JavaScript 函数中停止:

function execRule() {
    $.ajax({
        type: 'POST',
        url: "ExecuteRule",
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify({
            ruleId: PageState.Selected.RuleId,
            ruleSql: PageState.SqlEditor.RuleSql.getValue(),
            parameters: PageState.RuleParameters
        }),
        schema: {
            errors: function(response) {
                return response.error;
            },
            data: function(response) {
                return response.result;
            },
            total: function(response) {
                return response.rowCount;
            }
        },
        success: function(matchedList) {
            PageState.RuleResult = matchedList.result;

            var dataSource = new kendo.data.DataSource({
                data: matchedList.result
            });
            Grids.RuleResultsGrid.setDataSource(dataSource);
            PageState.Selected.ChildKey = null;
            updateButtonStates();
        },
        error: function(e) {
            var errorObject = JSON.parse(e.xhr.responseText);
            var errorMessage = errorObject.Message;

            //clear old error message 
            //TODO: gridWidget.clearErrorMessage("error-message");

            // add new error message
            //TODO: gridWidget.addErrorMessage("error-message", errorMessage);
        },
        pageSize: 10,
        requestEnd: this.onRequestEnd
    });

代码工作正常,除了由于某种原因剑道网格有“未定义”和“NaN”,我在图中放置了红色框以突出显示:

enter image description here

一打开网页就出现错误。有人对我收到 TypeError 的原因有什么建议吗? TIA。

更新:

“未定义”和“NaN”问题已解决,但现在我可以选择各种 pageSize 值,但当我进行网格刷新时,它会停留在值“10”。为什么会出现这种情况?

最佳答案

必须将 pageSize 放入数据源中:

function execRule() {
    $.ajax({
        type: 'POST',
        url: "ExecuteRule",
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify({
            ruleId: PageState.Selected.RuleId,
            ruleSql: PageState.SqlEditor.RuleSql.getValue(),
            parameters: PageState.RuleParameters
        }),
        schema: {
            errors: function(response) {
                return response.error;
            },
            data: function(response) {
                return response.result;
            },
            total: function(response) {
                return response.rowCount;
            }
        },
        success: function(matchedList) {
            PageState.RuleResult = matchedList.result;

            var dataSource = new kendo.data.DataSource({
                pageSize: 10,
                data: matchedList.result
            });
            Grids.RuleResultsGrid.setDataSource(dataSource);
            PageState.Selected.ChildUwi = null;
            updateButtonStates();
        },
        error: function(e) {
            var errorObject = JSON.parse(e.xhr.responseText);
            var errorMessage = errorObject.Message;

            //clear old error message 
            Grids.RuleResultsGrid.clearErrorMessage("error-message");

            // add new error message
            Grids.RuleResultsGrid.addErrorMessage("error-message", errorMessage);
        },
    });
}

在这里找到解决方案:Pager error in Kendo Grid(Nan-Nan of 1 items)

也就是说,分页现在不接受不同的页面大小,例如 10、50、100 或 500。我可以选择这些值,但它始终默认返回到我的 execRule 函数中的 10 值。有人对为什么会发生这种情况有任何建议吗?

更新:

通过更新我的绑定(bind)函数以包含 pageSize 来修复分页问题:

function bindRuleResults() {
    PageState.Selected.Old.RuleResult = PageState.Selected.RuleResult;

    var dataSource = new kendo.data.DataSource({
        pageSize: 10,
        data: PageState.Selected.RuleResult
    });
    Grids.RuleResultsGrid.setDataSource(dataSource);
    PageState.Selected.RuleResult = null;
}

发现这是一篇有用的文章:http://www.codeproject.com/Articles/606682/Kendo-Grid-In-Action

关于javascript - KendoGrid分页有 "undefined"和 "NaN",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31412156/

相关文章:

javascript - 在按下另一个输入字段的按键时触发输入字段的按键事件?

javascript - 如何禁止向 <td> 添加元素

javascript - 如果页面刷新速度足够快,则不会调用 socket.io 'disconnect'

javascript - 为什么我的 jquery 切换类无法单击

jquery - CSS对齐问题

css - 链接从 Bootstrap Studio 导出的 CSS 文件的问题

c# - 如何从数据列中获取数据

javascript - 在 Button 标签内的 span 标签 onClick 上更改类

javascript - 如何执行 "meta refresh",但前提是页面存在

javascript - 使用 JQuery 加载 IMDB 海报不起作用