2013-12-12 70 views
0

我从MVC扩展Telerik网格,我试图创建出口到基于网格数据的xlsx。Telerik MVC网格,获取IQueryable匹配当前用户过滤器

问题是,我不太清楚如何获取有关网格中实际用户过滤器的信息。

假设用户通过在名称上应用过滤器来过滤网格,如名称以“Bu”开头。此外,由Age定购的用户。

的网址将是这样的:

?listing-1-page=1&listing-1-orderBy=Age-asc&listing-1-groupBy=~&listing-1-filter=Name~startswith~'Bu' 

我一定能解析这个像串并获取数据我需要什么。然而,这个解析将会非常复杂,并且与这个特定的网格相关联。

问题是

有没有办法从电网获得的IQueryable?从我发现的这个IQueryable是在OnActionExecuted中执行Action方法之后生成的。 我的想法是,我添加按钮,工具栏格,它将调用ActionMethod

public FileStreamResult MyExportMethod() 

,在这种方法我“莫名其妙”,从电网获得的IQueryable。

谢谢

+1

有上Telerik的网站上的代码示例展示了如何做你想做的要做:http://demos.telerik.com/aspnet-mvc/razor/grid/customcommand – ataravati

+0

谢谢,但我忘了提到我正在使用服务器端绑定和ClientEvents现在正在工作。 – Chatumbabub

回答

0

如果它与服务器结合使用的网格,它是不可能使用客户端事件OnDataBound这里显示: http://demos.telerik.com/aspnet-mvc/razor/grid/customcommand(感谢ataravati的评论)

然而, 事件的OnLoad会被解雇。

解决方案可以是这样的:

在CSHTML:

t.Custom().HtmlAttributes(new { id = "export" }). 
     Text("Export").Action("Export", "Home", new { page = 1, orderBy = "~", filter = "~" }); 
    .ClientEvents(events => events.OnLoad("OnLoad")) 


<script type="text/javascript"> 
    function OnLoad() { 
     var grid = $(this).data('tGrid'); 

     // Get the export link as jQuery object 
     var $exportLink = $('#export'); 

     // Get its 'href' attribute - the URL where it would navigate to 
     var href = $exportLink.attr('href'); 

     // Update the 'page' parameter with the grid's current page 
     href = href.replace(/page=([^&]*)/, 'page=' + grid.currentPage); 

     // Update the 'orderBy' parameter with the grids' current sort state 
     href = href.replace(/orderBy=([^&]*)/, 'orderBy=' + (grid.orderBy || '~')); 

     // Update the 'filter' parameter with the grids' current filtering state 
     href = href.replace(/filter=(.*)/, 'filter=' + (grid.filterBy || '~')); 

     // Update the 'href' attribute 
     $exportLink.attr('href', href); 
    } 
</script> 

在的Controler

public ActionResult Export(int page, string orderBy, string filter) 
    { 
    IEnumerable orders = GetOrders().AsQueryable().ToGridModel(page, 10, orderBy, string.Empty, filter).Data; 
    } 
相关问题