Чтобы ответить на вопрос. Это похоже на ошибку в кендо. Установка для pageSize значения 0 (ярлык для «всего») после того, как источник данных уже был привязан, всегда приведет к тому, что у сетки будут проблемы с любыми пользовательскими фильтрами, объявленными внутри шаблона панели инструментов.
Если быть точным, если у вас есть собственный фильтр, определенный внутри шаблона панели инструментов:
@(Html.Kendo().TextBox().Name("Filter").Deferred())
Вы подключаете его через определение источника данных в сетке, например:
.DataSource(ds =>
ds.Ajax()
.PageSize(defaultPageSize)
.Read(a => a.Action(actionName, controllerName, new
{
param = Model.param
}).Data("getFilterParameters")))
[1110 ] в javaScript, извлекающем параметры, например:
getFilterParameters: function () {
return this.filterParameters;
},
, заполняющие их методом:
filter: function () {
var grid = $("#Grid").data("kendoGrid");
this.filterParameters = {
param: $("#Filter").val()
};
grid.dataSource.page(1);
}
, к которому подключен простой прослушиватель событий:
$("#Filter").on("keyup", filter);
[1113 ] Затем после программного изменения pageSize на 0 / "all" с помощью:
$("#Grid").data("kendoGrid").dataSource.pageSize(0);
Фильтр начнет всегда возвращать NaN в качестве текущей страницы / пропуска объекта фильтра, переданного на сервер с параметрами запроса (хотя сетка будет отображать числа правильно). Это вызовет исключение «строка не в правильном формате» внутри кода платформы на конечной точке всякий раз, когда вы пытаетесь использовать фильтр. Решение вышеупомянутого состоит в том, чтобы немного изменить метод getFilterParameters:
getFilterParameters: function (e) {
// Workaround for Kendo NaN pager values if pageSize is set to All
if (isNaN(e.page)) e.page = 1;
if (isNaN(e.skip)) e.skip = 0;
//
return this.filterParameters;
}
Это повторно инициализирует страницу и пропускает значения перед отправкой запроса фильтра. Эти значения в любом случае будут повторно заполнены в конечной точке правильными значениями. Не я это заметил, а еще один разработчик, работающий над проектом, кредит ей
.Просто обработайте onclick своей кнопки для выполнения функции, которая звонит tb_show()
, передача значения текстового поля. Что-то как
... onclick = "doSearch()" ...
function doSearch()
{
tb_show(caption, 'Search.aspx?KeepThis=true&q=\"' +
$('input#tb').val() +
'\"&TB_iframe=true&height=500&width=700');
}
Вот идея. Я не думаю, что это очень симпатично, но должно работать:
$('input#tb').blur(function(){
var url = $('input.thickbox').attr('alt');
var tbVal = $(this).val();
// add the textbox value into the query string here
// url = ..
$('input.thickbox').attr('alt', url);
});
В основном Вы обновляете тег высокого звука кнопки каждый раз, когда текстовое поле теряет фокус. Вместо этого Вы могли также слушать нажатия клавиш и обновление после всех.
До updateing строка запроса, я позволю Вам выяснить лучший способ. Я вижу помещение заполнителя там как: &TB=TB_PLACEHOLDER. Затем можно просто сделать строковую замену.
В коде - позади Вас мог также просто добавить тег высокого звука progammatically,
button1.Attributes.Add("alt", "Search.aspx?KeepThis=true&TB_iframe=true&height=500&width=700");
Если вы читаете руководство в разделе содержимого iframe, оно сообщает вам, что ваши параметры должны быть перед параметром TB_iframe. Все после этого снимается.