2014-03-02 2 views
1

MVC에 테이블 뷰를 출력하는 애플리케이션을 작성하고 있습니다. 테이블의 열 중 하나에는 jQuery UI 대화 상자를로드하는 액션 링크가 포함되어 있습니다. 대화 상자에서 데이터를 저장할 때 새로 저장된 데이터를 잡아서 새로운 부분 뷰 html로 그리드를 다시 그리기 위해 ajax를 통해 부분 뷰를 반환하는 GridRefresh 컨트롤러 메서드를 호출합니다. $ ('# mainGrid') .html (data) jQuery 호출을 사용하여 페이지의 html을 덮어 씁니다. 이 호출은 Div의 내용을 올바르게 대체해야하므로 RefreshGrid 함수가 호출 될 때마다 4MB의 누수가 발생합니다. .empty(), .remove(), .replaceWith(), jQuery.fragments 지우기, javascript (getElementById)를 사용하여 div 요소 지우기 등과 같은 온라인 기사에서 수 많은 수정 사항을 시도했습니다. 아무것도 작동하는 것 같습니다.jQuery 메모리 누수로 MVC 부분 뷰를 반환

참고 : HTML보기의 응답 데이터 크기는 약 1.2MB이며 크기가 내 문제를 일으킬 수 있습니까? 내가 jQuery를의 1.10.2와 IE9와

MVC 컨트롤러을 MVC3을 사용하고

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

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

    return null; 
} 

아약스/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

는 일반 MVC를 사용하여 동일한 기능을 달성 해봤 - Ajax를 .BeginForm 트릭을해야합니다. 나는 그것을 여러 번 사용했고 나는 어떤 메모리 누수도 발견하지 못했다. 간단한 예는

View.cshtml에게 것

@using (Ajax.BeginForm("Action_name", "Controller_name", new AjaxOptions { 
             InsertionMode = InsertionMode.Replace, 
             HttpMethod = "POST" 
             ...}) 
{ 
    Html.Partial("PartialView_name") 
} 
데이터가 들어올 때 새로운
+0

바실, 나는 모든 클라이언트 브라우저를 말할 수있는 방법 방법을 사용하여 새로 고침하려면? – codeg

+0

InsertionMode = InsertionMode.Replace 이것은 수신 된 데이터와 정확히 무슨 상관이 있는지를 MVC에 알려주는 옵션입니다. 이 경우 사용 블록에있는 모든 내용이 응답으로 대체됩니다. 다른 옵션은 InsertionMode.InsertAfter 및 InsertionMode.InsertBefore입니다. –

+0

올바른 답을 제공했다고 믿습니다. jQuery UI 대화 상자에서 저장 버튼을 클릭하면 MVC가 각 컴퓨터에서 그리드를 업데이트하도록 지시하는 방법 밖에 없습니다. MVC 애플리케이션을 실행하고 있습니까? – codeg

관련 문제