如何将Kendo过滤器对象发送到控制器操作

时间:2013-04-22 16:25:48

标签: jquery asp.net asp.net-mvc kendo-ui kendo-grid

如何在ASP.NET MVC中将Kendo网格过滤器发送到操作?

我使用这种结构并且它正在工作,但我无法在控制器中获得发送值。参数"模型"在行动中是空的。

    $('#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动作

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

谢谢。 :)

1 个答案:

答案 0 :(得分: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'组成的对象。过滤器中的每个元素都是由“字段”,“值”和“运算符”组成的对象。目前你的参数'model'是空的只是因为你没有发送任何由'model'这个名字定义的东西。实际上,您的数据如下所示:

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

如果你想把它作为json传递,你在控制器中的参数应该反映你真正发送的是什么(或者你可以绑定前缀),以便反序列化可以发挥它的魔力。 所以它要么

data: {model : filter}

 public ActionResult Print(Filters filters, string logic)

其中Filters是一个具有3个字段的类,与客户端dataSource.filter().filters数组相同。 因为其中一个字段是“运算符”,即AFAIR C#限制关键字,您还必须将所有数据从“过滤器”移动到某些“temporaryFilters:{field:'',value:'',_ operator: ''}。这是太多的工作,所以放弃该解决方案并使用dataSource:)