2013-04-22 2 views
0

ASP.NET MVC에서 Kendo 그리드 필터를 동작에 보내려면 어떻게해야합니까?검도 필터 객체를 컨트롤러 동작으로 보내려면 어떻게해야합니까?

이 구조를 사용하고 있는데 작동하지만 컨트롤러에서 보내지는 값을 얻을 수 없습니다. 실행중인 매개 변수 '모델'이 비어 있습니다.

[HttpPost] 
    public ActionResult Print(object model) 
    { 
     var r = Request; 
     return View(); 
    } 

$('#btn-print').click(function() { 
     filter = $('#trips').data('kendoGrid').dataSource.filter(); 
     $.ajax({ 
      type: 'post', 
      url: '@Url.Action("Print", "Trips")', 
      //dataType: 'json', 
      data: filter, 
      success: function (d) { 
       var win = window.open('about:blank'); 
       with (win.document) { 
        open(); 
        write(d); 
        close(); 
       } 
       //alert('print click.'); 
      } 
     }) 
    }); 

ASP.NET 액션 감사합니다. :)

답변

0

당신의 접근 방식은 나에게 놀랍습니다. 왜 그냥 만들지 않는가?

var customDS = new kendo.data.dataSource( 
    transport: 
    { 
     read: 
     { 
     url: '@Url.Action("Print","Trips")', 
     dataType: 'aspnetmvc-ajax' 
     } 
    }, 
    requestEnd: function (d) { 
       var win = window.open('about:blank'); 
       with (win.document) { 
        open(); 
        write(d); 
        close(); 
       } 
});) 

그리고 단순히 필터를 복사할까요?

if ($('#trips').data('kendoGrid').dataSource.filter()) 
{ 
    // if no filters are applied .filter() might return undefined, so to prevent 
    // errors lets check if any filters are applied 
    var filters = $('#trips').data('kendoGrid').dataSource.filter().filters; 
    customDS.filter(filters); 
} 

그런 다음 여행 그리드로 진행하십시오. dataType은 json이 아니므로 유의하십시오.

그러나 dataSource 및 json을 사용하지 않고 절대적으로 수행해야하는 경우에는 훨씬 더 어려워 질 것입니다. dataSource.filter() 은 'filters'배열과 'logic'으로 구성된 객체를 반환합니다. 필터의 각 요소는 'field', 'value'및 'operator'로 구성된 객체입니다. 현재 'model'매개 변수가 비어있는 순간은 'model'이라는 이름으로 정의 된 것이 아무것도 전송되지 않기 때문입니다. 실제로 데이터는 다음과 같습니다

data: { filters: [somearray], logic: 'somelogic' } 

당신이 컨트롤러에 매개 변수 당신이 정말로 보내는 (또는 접두사를 바인딩 할 수 있습니다) 무엇을 반영해야 JSON로 전달하려는 그래서 직렬화가 마법을 할 수있는 경우 . 너무 어느

data: {model : filter} 

또는 필터 3 필드를 갖는 클래스
public ActionResult Print(Filters filters, string logic) 

클라이언트 측 dataSource.filter().filters 배열과 같은. AFAIR C#의 제한된 키워드 인 필드 중 하나가 '연산자'이기 때문에 모든 데이터를 'filters'에서 'temporaryFilters : {field :' ', value :' ', _operator : ''}. 어느 것이 너무 많은 일을하므로, 그 솔루션을 포기하고 데이터 소스 하나를 사용하십시오 :

+0

안녕하세요, 너무 광범위한 답변을 주셔서 감사합니다; 하지만 실제로하고 싶은 것은 실제로 필터링 된 그리드와 함께 PDF를 보여주는 것입니다 ... 그리고 만약 내가 잘 이해한다면, 여러분은 다음과 같이 씁니다 : 데이터로드 후 팝업 창과 응답을 표시합니다. 나는 사용자가 그리드를 보여주고, 데이터를 필터링 한 다음 현재 데이터를 프린트하고 있습니다. 그래서 현재 필터를 보내고 싶습니다. 그리고 네, 필터를 위해 강력한 형식의 클래스를 만들어야합니다. Btw : "operator"는 키워드이지만 @operator를 사용할 수 있습니다. –

+0

그리고 문자열로 속성 "유형"을 추가하는 것이 유용합니다 - 내가 원하는 값의 유형을 알고 싶습니다. 왜냐하면 "where"조건을 linq 쿼리에서 생성하기를 원하기 때문입니다. :) –

+0

나에게 제안 된 dataSource 접근법은 Trips 컨트롤러에서 인쇄 작업에 현재 그리드 필터를 보냅니다 (다른 것들과 함께). BTW - @ 오퍼레이터 덕분에, 나는 그것을 몰랐다. – ceaggregation

관련 문제