【问题标题】:How can I send Kendo filter object to controller action如何将 Kendo 过滤器对象发送到控制器操作
【发布时间】:2013-04-22 16:25:47
【问题描述】:

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

我正在使用这种结构并且它正在工作,但我无法在控制器中获得发送值。作用中的参数“model”为空。

    $('#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();
    }

谢谢。 :)

【问题讨论】:

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


    【解决方案1】:

    你的方法让我有点吃惊。为什么不直接创建

    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 和 as json 的情况下执行此操作,那么这将变得更加困难。 dataSource.filter() 返回由“过滤器”数组和“逻辑”组成的对象。过滤器中的每个元素都是由“字段”、“值”和“运算符”组成的对象。目前您的参数“模型”为空仅仅是因为您没有发送由名称“模型”定义的任何内容。实际上,您的数据如下所示:

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

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

    data: {model : filter}
    

     public ActionResult Print(Filters filters, string logic)
    

    其中 Filters 是一个有 3 个字段的类,与客户端 dataSource.filter().filters 数组相同。 并且因为其中一个字段是 'operator',它是 AFAIR C# 受限关键字,所以您还必须将所有数据从 'filters' 移动到一些 'temporaryFilters: {field:'', value:'', _operator: ''}。这是太多的工作,所以放弃那个解决方案并使用数据源之一:)

    【讨论】:

    • 您好,感谢您如此广泛的回复;但我真正想做的是显示带有实际过滤网格的 PDF ...... :) 如果我理解得很好,你会写如下内容:数据加载后打开弹出窗口并显示响应。我想做这样的事情:用户显示网格,过滤数据,然后打印他/她看到的当前数据。所以,这就是我想要发送当前过滤器的原因。是的,我必须为过滤器创建强类型类。顺便说一句:“operator”是关键字,但你可以使用@operator。
    • 添加属性“type”作为字符串很有帮助 - 我想知道我正在使用什么类型的值,因为我想在 linq 查询中创建“where”条件。 :)
    • 我建议的 dataSource 方法将当前网格过滤器发送到 Trips 控制器中的 Print 操作(好吧,还有其他一些东西)。顺便说一句 - 感谢@operator,我不知道。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多