【问题标题】:Add CSS element after kendogrid refreshkendogrid 刷新后添加 CSS 元素
【发布时间】:2018-04-10 17:12:10
【问题描述】:

我有一个发送到 MyController 中的 MyAction 的 ajax 调用。它返回给我成功的结果和我想要附加一些 CSS 的元素的 Id。

返回 Id,并添加 css,但之后发生 refreshGridData 删除我刚刚添加到元素的 css。

有没有办法等待 refreshGridData 完成然后添加 css?

我确实尝试了 ajax 的 done.. 它没有工作。

    $.ajax({
        url: "@Url.Action("MyAction", "MyController")",
        type: "POST",
        data: postData,
        success: function (result) {
            if (result.Success) {
                alert("success");
                refreshGridData();
            }
        },
        error: function (result) {
            alert("Error!");
        }
        AddMyCSSToThis(result.Id);
       // done: AddMyCSSToThis(result.Id);
    }); 

    function refreshGridData() {
        var ajaxContainer = $(".grid-wrap");
        kendo.ui.progress(ajaxContainer, true);
        refreshGrid();
        kendo.ui.progress(ajaxContainer, false);
    }

【问题讨论】:

  • 为什么 refreshGrid 函数在您的示例中调用自身?
  • 您在成功回调中调用了refreshGridData();,但该函数调用了refreshGrid()
  • 对不起,把函数放在这里时出错了。它应该是 refreshGridData() ,它有一个函数 refreshGrid();
  • @JohnnyBizzle 更新了它。
  • @MartinD。更新了问题。

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


【解决方案1】:

你为什么不传入你想将更改添加到你的 refreshGridData() 函数的 ID,例如:

 $.ajax({
    url: "@Url.Action("MyAction", "MyController")",
    type: "POST",
    data: postData,
    success: function (result) {
        if (result.Success) {
            alert("success");
            var savedId = result.Id;
            refreshGridData(savedId);
        }
    },
    error: function (result) {
        alert("Error!");
    }
    AddMyCSSToThis(result.Id);
   // done: AddMyCSSToThis(result.Id);
}); 

function refreshGridData(savedId) {
    var ajaxContainer = $(".grid-wrap");
    kendo.ui.progress(ajaxContainer, true);
    refreshGrid(savedId); // I'm assuming this function is what adds the css
    kendo.ui.progress(ajaxContainer, false);
}

【讨论】:

    【解决方案2】:

    您可以创建一个全局变量并在网格 dataBound 事件中使用它来添加 CSS。

    _addCssToResultId = null;
    $.ajax({
        url: "@Url.Action("MyAction", "MyController")",
        type: "POST",
        data: postData,
        success: function (result) {
            if (result.Success) {
                alert("success");
                _addCssToResultId = result.Id;
                refreshGridData();
            }
        },
        error: function (result) {
            alert("Error!");
        }
    });
    
    // add a dataBound handler to your grid
    $("#grid").kendoGrid({
      dataBound: function(e) {
        if(_addCssToResultId) {
           AddMyCSSToThis(_addCssToResultId);
           _addCssToResultId = null;
        }
      }
    });
    

    【讨论】:

    • 它不起作用..我在文档上声明了变量准备好,不幸的是这不起作用..
    • 尝试将变量声明在文档之外准备就绪,否则它将不在全局范围内或删除变量名前面的 var 关键字。
    • 这对我也不起作用..就在脚本开始之前,在文档准备好之前,有无var。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-17
    • 2011-04-20
    • 1970-01-01
    • 2012-05-18
    相关资源
    最近更新 更多