Вот моя настройка. У меня есть сетка Telerik. Вот что .cshtml.Метод контроллера, называемый 2, нажатием кнопки поиска
@(Html.Telerik().Grid<UserViewModel>().Name("UserGrid")
.DataBinding(binding => binding.Ajax().Select("List", "Account", Model.ToRoute(Html))
.Insert("Insert", "Account")
.Delete("Delete", "Account")
.Update("Save", "Account"))
.DataKeys(keys => keys.Add(model => model.UserName))
.ToolBar(toolbar => toolbar.Template(@<text>
@Html.Partial("GridSearchTool")
</text>))
.Columns(columns =>
{
columns.Bound(u => u.Email)
.EditorTemplateName("EmailAddress")
.Filterable(true)
.Sortable(true)
.Width(300);
})
.Pageable()
.Filterable()
.Reorderable(reordering => reordering.Columns(true))
.Scrollable(scrollable => scrollable.Height(500).Enabled(false))
.Editable(editing => editing.Enabled(true)
.DisplayDeleteConfirmation(true)
.Mode(GridEditMode.PopUp)
.TemplateName("UserEditor"))
.ClientEvents(events => events.OnEdit("onRowEdit")
.OnError("onGridError")
.OnLoad("gridLoaded")
.OnDataBinding("gridAjaxBinding")
.OnDataBound("gridAjaxBound")
.OnSave("gridAjaxSaved"))
Вот запись в моем Global.ascx для маршрутов.
routes.MapRoute(
"Users", // Route Name
"Account/{action}/{username}", // URL with parameters
new { controller = "Account", action = "Search", username = "" }
);
Увидеть, что у меня есть места, как частичный вид, прикрепленный к моей панели инструментов сетки. Он работает как текстовое поле, кнопки (поиск и очистка).
Вот скриншот.
Когда я загружаю сетку в моем контроллере здесь есть функции/действия он называет. 1) Индекс активности 2) Список действий
Здесь приведен пример.
public ActionResult Index(string username)
{
return View(new GridViewModel
{
Query = username,
QueryField = "Email",
GridName = "UserGrid",
Controller = "Account"
});
}
[Authorize(Roles = "Administrator")]
[GridAction]
public ActionResult List(string username)
{
return Json(GetGridModel(DatabaseContext.FromContext()));
}
Эта работа прекрасна, когда я изначально загружаю сетку. Теперь у меня много данных на моей странице, и я хочу найти конкретную запись, поэтому я ввожу свой запрос или строку в текстовое поле в текстовом поле поиска. Когда я делаю это, здесь вызывается метод контроллера.
1) Индекс (с запросом, введенным в поле поиска) 2) Список (с запросом, введенным в поле поиска) 3) Список (с запросом, введенным в поле поиска)
Я не знаю, почему он называл метод List несколько раз. Я также попытался изменить маршруты Global.ascx с вызовом другого метода вместо индекса, но это не работает. Он по-прежнему называется индексом несколько раз.
Буду признателен за любую помощь или идеи относительно этой проблемы.
Также приведены некоторые методы Javascript.
Спасибо за быстрый ответ. Вот оба метода, которые я нашел на одном из сценариев java.
gridAjaxBinding = function (evt) {
var grid = $(evt.target);
if (grid.length) {
grid.block({
message: '<div class="loading"><img src="/Content/images/busy.gif"><span>Loading...</span></div>'
});
}
};
gridAjaxBound = function (evt) {
var grid = $(evt.target);
if (grid.length) {
grid.unblock();
}
grid.unbind('edit', gridAjaxEditing);
grid.bind('edit', gridAjaxEditing);
var gridId = '#' + grid.attr('id');
// Get the export link as jQuery object
var $exportLink = $('#export');
if ($exportLink.length) {
grid = grid.data('tGrid');
// 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);
}
setupContextMenu(grid);
};
Спасибо, Вивек
Привет, я добавил эти два метода к моему вопросу. Можете ли вы просмотреть их и сообщить, если с ними что-то не так? Я также попытаюсь отладить эти методы. Спасибо за помощь. –
В коде нет ничего подозрительного. Что произойдет, если вы оставите 'gridAjaxBound' пустым. Может быть, есть. в 'setupContextMenu', или кнопка поиска вызывает двойную перегруппировку. – Andreas
Я нашел еще 1 вещь. В моем представлении GridSearchTool у меня есть код ниже dojo.addOnLoad (function() { applyGridFilter ('# @ Model.GridName', '@ Model.QueryField', '@ Html.Raw (Модель.Query) ',' substringof '); }); Этот код вызывает функцию applyGridFilter и там он вызывает функцию tGrid.filter. Вот код функции. Я могу скопировать эту функцию, если вы хотите просмотреть ее? –