2014-07-11 5 views
0

나는 검도 UI 그리드에서 서버 측 페이징을 사용하려고하는데, 어디에도 문서화되지 않은 오류가 나타납니다.Kendo Server 사이드 페이징 MVC 컨트롤러에 게시

I 나타나는 오류는 다음과 같습니다

var postData = { "searchTerm" : searchTerm, "targetDB" : targetDB, "searchObj" : searchObj } 

var grid = $("#grid1").kendoGrid({ 
    pageable: { 
     pageSize: 40 
    }, 
    dataSource: { 
     error: function (e) { 
      if (e.errors !== false) { 
       $("#errorContainer").html(e.errors); 
      } 
     }, 
     transport: { 
      read: { 
       url: servicePath, 
       dataType: "json", 
       data: postData, 
       type: "POST" 
      } 
     }, 
     serverPaging: true, 
     schema: { 
      total: "total", 
      data: "data" 
     } 
    }, 
    dataBound: function (e) { 
     var end = new Date().getTime(); 
     var time = end - start; 
     console.log("Time taken: " + time); 
     $("#loading").hide(); 
     $("#grid1").show(); 
     $("#totalTimeBadge").html(time + " milliseconds"); 
     $("#totalCountBadge").html(this.dataSource.total() + " items"); 
     $("#propertyCountBadge").html($(".k-header").length + " properties"); 
     logTimes(time, this.dataSource.total(), $(".k-header").length); 
    } 
}); 

게시물이 내가 사용하는 이유 (: 나는 온라인으로 발견 한 문서와 다른 예 당

Unhandled exception at line 11, column 15140 in kendo.all.min.js 
0x800a138f JavaScript runtime error: Unable to get property 'slice' of undefined or null reference. 

, 나는 사용하여 내 검도 그리드를 결합 아마 추측 할 수 있듯이) 검색 기능을 구현하고 Kendo Grid를 사용하여 검색 기준과 검색 대상 DB를 게시합니다 (두 가지 가능성 있음).

내가 jslint 통해 반환 JSON을 실행하고 유효한 JSON이있는 구조임을 확인했습니다

:

[{ 
    "total": 50053, 
    "data": [{objects}] 
}] 

내가 수있는 JSON의 더 큰 실제 발췌를 게시해야하는 경우가 있어요 조금 오래 여기에 게시하십시오.

내가 여기이 질문에 대한 답변을 추적했다 : Error while implementing basic paging in Kendo UI Grid in ASP.NET

그러나 (그 차이를 만드는 경우 아무 생각) 항목을 검색하지 않기 때문에 검도 그리드를 사용하지 않는이 질문뿐만 아니라 게시하고 나는 또한 것을 확인했다 이 질문에 대한 유일한 대답은 내 경우에는 적용되지 않습니다.

total 데이터 필드를 꺼내서 내 응답의 원시 데이터 만 반환하면 그리드가 올바르게 바인딩되지만 서버 쪽 페이징을 통합해야합니다.

아이디어가 있으십니까? 감사!

업데이트는 아래의 제안에 따라, 나는이 DataSourceResult을 활용에 직선 문자열을 반환에서 내 컨트롤러를 변경 시도 :

public ActionResult DataSourceResult() 
    { 
     string dataStr = "[{\"NAME\": \"0720-FI-1081\", \"DESCRIPTION\": \"HP FLARE HEADER DISTRIBUTION\"},{\"NAME\": \"0720-FIC-1002\",\"DESCRIPTION\": null}]"; 
     DataSourceResult result = new DataSourceResult(); 
     result.Data = dataStr; 
     result.Total = 50; 
     string json = JsonConvert.SerializeObject(result); 
     return Content(json, "application/json"); 
    } 

같은 오류가 발생했습니다.

답변

2

Telerik 지원과 이메일을 교환 한 후, 여기에 내가 발견하고 작동하는 것입니다 :

json으로이 유효 JSON 있지만 []에 싸여 할 수없는 반환되는

. 대신 다음 양식이 작동합니다.

{ 
"Data": 
    [ 
     {"Name":"John","Description":"None"}, 
     {"Name":"Jane","Description":"StillNone"} 
    ], 
    "Total":50,"AggregateResults":null,"Errors":null 
} 

이것은 DataSourceResult이 반환하는 것입니다.뿐만 아니라 작동하는 평면 문자열 :

{ 
"Total": "50", 
"Data": [ 
    {"NAME": "0720-FI-1081", "DESCRIPTION": "HP FLARE HEADER DISTRIBUTION"}, 
    {"NAME": "0720-FIC-1002","DESCRIPTION": null} 
    ] 
} 

핵심 포인트 여기에 전체 JSON 결과가 그러나 응답 의 데이터 필드가[]에 싸여해야 []에 싸여 할 수 없다는 것. 두 필드가 대문자로

schema: { 
     total: "Total", 
     data: "Data" 
    } 

: 위의 문자열을

는 그리드 선언은 위의 OP에서 사소한 편집을 가지고있다.

이 내용은 어디에서나 확인할 수 있습니다.

건배

+0

"이 문서는 어디에도 기록되어 있지 않습니다. 왜 나는 검도를 만져야 할 때마다 나를 분노하게 만드는 이유. – AaronLS

0

우리는 비슷한 상황에 직면했습니다. 우리가 알아야 할 유일한 해결책은 검색 결과 및 총 레코드 수를 반환하는 대신 반환하는 동안 DataSourceResult 개체를 사용하는 것입니다.

List<SearchResult> lst = GetSearchResult(filterCriteriaPassed);// Your search logic 

    DataSourceResult result = null; 

    // Reason to set the page as 1 for DataSource result was that we were only 
    // retriveing single page records so we had to set first page to show manually. 
    request.Page = 1; 
    result = lst.ToDataSourceResult(request); 

    result.Total = totalRecords; 

    return Json(result); 

이 다른 문제를 해결할 대답으로이 표시를하십시오하지 않는 경우 알려줘 :

우리가 사용되는 코드에서보세요.

+0

show 시도가 업데이트되었습니다. – Blunderfest

+0

데이터 바인딩에서 총계를 표시하는 대신 ** http : //demos.telerik.com/kendo-ui/grid/aggregates**를 통해 총계를 얻는 것이 좋습니다. 귀하의 문제를 해결할 수 있다고 가정합니다. –

관련 문제