这是我的设置。我有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)行动清单
这是exaple。
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);
};
谢谢, 的Vivek
答案 0 :(得分:0)
这很可能是由于您没有发布的JavaScript代码。如果您在grid.filter(...)
或gridAjaxBinding
中调用gridAjaxBound
方法,则会出现此问题。我遇到了同样的问题,它与设置grid.filter
两次有关。以下代码对我们有用(过度简化):
$("#button").on("click", function (event) {
event.preventDefault();
evo.filterGridData();
});
evo.filterGridData = function filterGridData() {
var searchTerm = $("#searchTerm").val().replace(/'/g,"''");
var grid = $("#grid").data("tGrid");
grid.filter("substringof(FieldToSearchFor,'" + searchTerm + "')");
};