当我点击FilterButton时,它会在每次点击后每次都会点击警报。但是,动作方法GridData只是第一次被击中。你知道为什么吗?
$(document).ready(function () {
$('#FilterButton').click(function () {
alert('button clicked');
var myGrid = jQuery("#list").jqGrid({
url: '/Data/GridData/',
datatype: 'json',
mtype: 'POST',
......
这是请求的操作方法
[HttpPost]
public JsonResult GridData(string sidx, string sord, int page, int rows, string species, string methodOfTake, string outputType, string seasons, string years)
{
var results = (from a in db.t_harvest_statistics_elk
where a.year == "2008" && a.unit_number == 1
orderby a.id
select new { a.id, a.year, a.unit_number, a.total_hunters, a.bulls, a.cows }).ToList();
int pageIndex = Convert.ToInt32(page) - 1;
int pageSize = rows;
int totalRecords = results.Count();
int totalPages = (int)Math.Ceiling((float)totalRecords / (float)pageSize);
var pageResults = results.Skip(pageIndex * pageSize).Take(pageSize);
var jsonData = new
{
total = totalPages,
page,
records = totalRecords,
rows = (
from pageResult in pageResults
select new
{
id = pageResult.id,
cell = new[] {
pageResult.year.ToString(),
"Add",
pageResult.unit_number.ToString(),
pageResult.total_hunters.ToString(),
pageResult.bulls.ToString(),
"add",
pageResult.cows.ToString(),
"add",
"add",
"add"
}
}).ToArray()
};
return Json(jsonData, JsonRequestBehavior.AllowGet);
}
答案 0 :(得分:1)
jqGrid控件是一个有趣的野兽。
这里发生的事情是你第一次打电话初始化网格,因此首次设置网格将初始化网格所需的数据。这个初始化调用控制器动作,这是它第一次触及断点的原因。
对于每次后续点击,发生的事情是你正在调用jqGrid()方法,但由于它已经初始化,它忽略了调用,因此没有设置你指定的参数。
你需要做的是调用“setGridParam”方法,它允许你像这样更新jqGrid参数:
jQuery('#list').setGridParam({
url: '/Data/GridData/',
datatype: 'json',
mtype: 'POST',
...
);
更改网格参数后,需要触发如此刷新:
jQuery('#list').trigger("reloadGrid");
这不是最直观的设置,但这就是jqGrid的工作原理。