将MVC局部视图返回到jQuery内存泄漏

时间:2014-03-02 16:56:39

标签: jquery ajax asp.net-mvc jquery-ui-dialog

我正在MVC中编写一个应用程序来输出表View。表中的一列包含一个动作链接,用于加载jQuery UI对话框。当我从对话框保存数据时,我调用GridRefresh控制器方法,该方法抓取新存储的数据并通过ajax返回部分视图,以使用新的部分视图html重新绘制网格。我使用$('#mainGrid')。html(data)jQuery调用来覆盖页面上的html。这个调用正确,并且正确地替换了Div的内容,但每次调用RefreshGrid函数时,我最终都会发生4mb的泄漏。我尝试过在线文章中的大量修复,包括:使用.empty(),. remove(),.replaceWith(),清除jQuery.fragments,使用javascript清除div元素(getElementById)。似乎没什么用。

注意: html视图的响应数据大小约为1.2MB,这可能导致我的麻烦吗?我正在使用MVC3与jQuery 1.10.2和IE9

MVC控制器

[HttpPost]
public PartialViewResult RefreshGrid(DateTime effectiveDate, String searchVal)
{
    if (Request.IsAjaxRequest())
    {
        var gridModel = new GridModel();

        LoadGridDataFromDB(effectiveDate,searchVal);
        return PartialView("Grid", gridModel);
    }

    return null;
}

的Ajax / jQuery的

$.ajax({
  url: "Home/RefreshGrid",
  type: "post",
  data: {
         effectiveDate: effectiveDate,
         searchVal: searchVal
  },
  dataType: "html",
  success: function(data){
    alert("success");
    $("#mainGrid").html(data);
  },
  error:function(){ alert("failure");}
});

1 个答案:

答案 0 :(得分:1)

您是否尝试使用普通MVC完成相同的功能 - Ajax.BeginForm应该可以解决问题。我已经多次使用它,我从来没有注意到任何内存泄漏。一个简单的例子是

View.cshtml

@using (Ajax.BeginForm("Action_name", "Controller_name", new AjaxOptions {
                                        InsertionMode = InsertionMode.Replace,
                                        HttpMethod = "POST"
                                        ...})
{
   Html.Partial("PartialView_name")
}