Вот мои настройки. У меня есть Telerik Grid. Вот что такое .cshtml.
@(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 = "" }
);
Вы увидите, что я размещаю Seach как частичный вид, прикрепленный к моей панели инструментов сетки. Он называется одним текстовым полем, кнопками (поиск и очистка).
Вот снимок экрана.
Когда я загружаю сетку в свой контроллер, здесь отображаются функции / действия, которые он вызывает.
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);
};
Спасибо,
Вивек