这是我的设置。我有Telerik Grid。这就是.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 = "" }
);
您会看到我已将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);
};
感谢, 维韦克
嗨我已经将这2种方法添加到我的问题。你能否请他们回顾一下,让我知道他们是否有什么问题?我也会尝试调试这些方法。 感谢您的帮助。 – 2012-03-29 20:26:23
你的代码中没有任何可疑的东西。如果您将'gridAjaxBound'留空,会发生什么情况。也许有某事。在'setupContextMenu'中或者搜索按钮触发一个双重重新绑定。 – Andreas 2012-03-29 21:59:30
我发现了1件事。在我的GridSearchTool视图中,我有以下代码 dojo.addOnLoad(function(){ applyGridFilter('#@ Model.GridName','@ Model.QueryField','@ Html.Raw(Model。查询)','substringof'); }); 此代码正在调用applyGridFilter函数并且它正在调用tGrid.filter函数。这里是函数的代码。 如果您想查看,我可以复制该功能吗? – 2012-03-29 23:06:58