有没有办法禁用jqgrid本地缓存??? 我有一个你构建一些过滤器的页面,基于这个参数我创建了jqgrid。
问题是jqgrid不会改变postdata参数!我的意思是,在第二,第三,第四等搜索中,结果总是等于第一个。 我的jqgrid默认值是:
jQuery.extend(jQuery.jgrid.defaults, {
ajaxGridOptions: {
contentType: 'application/json;',
type: "POST",
cache: false,
beforeSend: function () {
$(".loading").show();
}
},
serializeGridData: function (postData) {
return JSON.stringify(postData);
},
datatype: 'json',
autowidth: true,
height: '100%',
rowNum: 10,
rowList: [10, 20, 30],
hidegrid: false,
prmNames: {
search: "isSearch",
nd: null,
rows: "numRows",
page: "numPage",
sort: "orderBy",
order: "orderType"
},
viewrecords: true,
gridComplete: function () {
$(".loading").hide();
},
jsonReader: {
root: function (obj) { return obj.d.rows; },
page: function (obj) { return obj.d.page; },
total: function (obj) { return obj.d.total; },
records: function (obj) { return obj.d.rows.length; },
repeatitems: false
}
});
jqGrid创建:
$myGrid.jqGrid({
postData: { from: jQuery.parseDate(fromQueryString), to: jQuery.parseDate(toQueryString) },
url: "/Search.aspx/Find",
colNames: ['Test'],
colModel: [
{ name: 'Test', index: 'Test', sortable: false, width: 40 }
],
sortname: "Date",
sortorder: "desc",
jsonReader: { id: "ID" },
pager: "pagerControl",
caption: "Results"
});
答案 0 :(得分:1)
如果我理解正确,页面已经出现控件,可以构建一些控件,例如input#from
和input#to
(<input>
字段,其中ids“来自”和“到”),这些控件定义了间隔您可以将其与其他参数一起发送到服务器。
我认为您的代码看起来像
var $myGrid = $("#list"),
fromQueryString = "",
toQueryString = "",
createGrid = function () {
$myGrid.jqGrid({
postData: {
from: jQuery.parseDate(fromQueryString),
to: jQuery.parseDate(toQueryString)
},
url: "/Search.aspx/Find",
colNames: ['Test'],
colModel: [
{ name: 'Test', index: 'Test', sortable: false, width: 40 }
],
sortname: "Date",
sortorder: "desc",
jsonReader: { id: "ID" },
pager: "pagerControl",
caption: "Results"
});
},
myRefresh = function () {
var fromQueryString = $("#from").val(),
toQueryString = $("#to").val();
createGrid();
};
$("#from").change(myRefresh);
$("#from").change(myRefresh);
createGrid();
问题是上面的代码错误。 createGrid
仅在第一次创建网格,然后(在myRefresh
内),在测试之后,网格$myGrid
已经创建,它不会显示任何内容。您可以理解这一点,您可以想象网格的许多部分:标题,列标题,寻呼机等只能创建一次。下次需要重新加载网格主体的内容。
刷新jqGrid的正确方法是调用.trigger("reloadGrid")
而不是尝试创建网格乘法次数。可以将代码修改为以下
var $myGrid = $("#list"),
fromQueryString = "",
toQueryString = "",
createGrid = function () {
$myGrid.jqGrid({
postData: {
from: function () {
return jQuery.parseDate($("#from").val());
},
to: function () {
jQuery.parseDate($("#to").val());
}
},
url: "/Search.aspx/Find",
colNames: ['Test'],
colModel: [
{ name: 'Test', index: 'Test', sortable: false, width: 40 }
],
sortname: "Date",
sortorder: "desc",
jsonReader: { id: "ID" },
pager: "pagerControl",
caption: "Results"
});
},
myRefresh = function () {
$myGrid.trigger("reloadGrid", [{page: 1}]);
};
$("#from").change(myRefresh);
$("#from").change(myRefresh);
createGrid();
如果在每次网格重新加载时都会调用from
的方法to
和postData
。例如,如果用户单击列标题以更改网格排序,或者用户选择显示网格的另一页面。您可以阅读here有关该方法的更多信息。
唯一可以改变的是serializeGridData
的代码,它应该测试postData
的属性并在需要时调用该函数。有关详细信息,请参阅here。