這是我的設置。我有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