2013-12-12 112 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; 
    } 
相關問題