2016-09-19 11 views
0

У меня есть сетка Kendo, в которой я пытаюсь отправить дополнительные данные в виде bool, которые я могу использовать для фильтрации возвращаемых данных в моем контроллере.Параметры сетки Kendo Ajax с .Net

Контроллер:

public ActionResult Securities_Read([DataSourceRequest]DataSourceRequest request, bool filter) { 
    if (filter == true) // do something. 
} 

Read:

.Read(read => read.Action("Action", "Controller").Data("filterFunction")) 

фильтр Функция:

function filterFunction() { 
    var filter = ($('#checkbox').is(":checked")) ? true : false; 
    console.log(filter); 
    return { 
     filter: filter 
    } 
} 

Checkbox обработчик события:

$('#checkbox').change(function() { 
    $('#grid').data('kendoGrid').dataSource.read(); 
}); 

При каждом изменении флажка выполняется функция изменения, которая, в свою очередь, вызывает сетку кендо для запуска функции чтения. Сетка кендо также вызывает функцию filterFunction для получения дополнительных параметров. Я вижу, что функция filterFunction действительно вызывается, потому что регистрирует значение фильтра для консоли. Однако, как только он возвращается к контроллеру, значение дополнительного параметра всегда равно нулю.

Что мне не хватает?

+0

Я действительно не поклонник оберток для кендо, но все, что я заметил, - это точка с запятой после вашего 'return {filter: true}'. Кроме того, вы пробовали передать строку или int, чтобы увидеть, работает ли она? Я не пытался воспроизвести то, что у вас есть. – KSib

+0

В дополнение к тому, что сказал @KSib: я смотрю на одну из моих рабочих реализаций, и я также не делаю с запятой оператор return, ОЧЕНЬ ВАМ, вам нужно добавить его в конец функции. Кажется, это единственное очевидное отличие от того, что я обычно делаю в вашем примере. –

ответ

0

Кажется, что фильтр является ключевым словом, используемым в рамках кендо. Так что, когда я изменил:

function filterFunction() { 
    var filter = ($('#checkbox').is(":checked")) ? true : false; 
    console.log(filter); 
    return { 
     filter: filter 
    } 
} 

к:

function filterFunction() { 
    var filter = ($('#checkbox').is(":checked")) ? "true" : "false"; 
    console.log(filter); 
    return { 
     shouldFilter: filter 
    } 
} 

Также обратите внимание, что вы можете передавать строки как параметры, так что я должен был изменить параметр в контроллере строки и истина/ложь значения для строк в функции JavaScript выше:

public ActionResult Securities_Read([DataSourceRequest]DataSourceRequest request, bool filter) { 
    if (filter == true) // do something. 
} 

к:

public ActionResult Securities_Read([DataSourceRequest]DataSourceRequest request, string filter) { 
    if (filter == "true") // do something. 
} 

Это решило мою проблему.