0

У меня есть сетка Telerik из MVC Extensions, и я пытаюсь создать экспорт в xlsx на основе данных в сетке.Telerik MVC grid, получить IQueryable соответствие текущего фильтра пользователя

Проблема в том, что я не совсем уверен, как получить информацию о фактических фильтрах пользователей в сетке.

Предположим, что пользователь фильтрует сетку, применяя фильтр по имени, например, имя начинается с «Bu». И, кроме того, пользователь orderd by Age.

URL-адрес будет что-то вроде:

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

Я могу, конечно, разобрать это как строку и получить данные, что мне нужно. Однако этот синтаксический анализ будет довольно сложным и слишком привязан к этой конкретной сетке.

Вопрос,

есть способ получить IQueryable из сетки? Из того, что я нашел, этот IQueryable создается после того, как метод Action выполняется в OnActionExecuted. Моя идея заключается в том, я кнопку на панели инструментов сетки, которая будет вызывать ActionMethod

public FileStreamResult MyExportMethod() 

и в этом методе я «как-то» получить IQueryable из сетки добавить.

Спасибо,

+1

Существует пример кода на веб-сайте Telerik, показывающий, как сделать то, что вы хотите делать: http://demos.telerik.com/aspnet-mvc/razor/grid/customcommand – ataravati

+0

Спасибо, но я забыл упомянуть, что я использую привязку на стороне сервера, и ClientEvents теперь работают. – Chatumbabub

ответ

0

Если это сетка используется с привязкой сервер, не представляется возможным использовать Client Event 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; 
    } 
Смежные вопросы