我是网络开发的新手,并且正在使用我的第一个ASP.NET MVC 3应用程序。我正在使用jqGrid并注意到刷新页面不会刷新下拉列表中的值,直到我在另一个选项卡中打开相同的页面,然后刷新第一个选项卡将获取更改的值。
我有一个控制器动作,如下所示:
public JsonResult FavoriteToppings()
{
var all = GetFavoriteToppings();
return Json(all, JsonRequestBehavior.AllowGet);
}
我对jqGrid定义的部分看起来像这样:
{ name: 'ToppingID', index: 'ToppingID', width: 200,
editable: true, align: 'left', edittype: 'select', stype: 'select',
editoptions: {
dataUrl: '@Url.Action("FavoriteToppings", "Dessert")',
buildSelect: createSelectList
},
searchoptions: {
dataUrl: '@Url.Action("FavoriteToppings", "Dessert")',
buildSelect: createSelectList,
sopt: ['eq']
}
},
和createSelectList
看起来像这样:
createSelectList = function (data) {
var response, s = '<select>', i, l, ri;
if (typeof (data) === "string") {
//var leng = data.length - 1;
response = jQuery.parseJSON(data);
}
else {
response = jQuery.parseJSON(data.responseText);
s += '<option value="">Select...</option>';
}
if (response && response.length) {
for (i = 0, l = response.length; i < l; i += 1) {
ri = response[i];
s += '<option value="' + ri + '">' + ri + '</option>';
}
}
return s + '</select>';
}
在编辑其中一个顶级名称时我注意到了这一点。我将拼写错误的“Hot Fugde”更改为“Hot Fudge”并将其保存。当我刷新页面但过滤器下拉列表没有时,表中的基础数据会更新以显示正确拼写的顶部(即,所有行都正确反映了更改)。在第一次接受改变之后,根本没有调用该动作。
当我在浏览器的不同页面中打开同一页面时,会调用该操作。之后,刷新第一个选项卡将导致正确拼写的条目显示在选择列表中。
也许我只是错误地解决这个问题。有什么指导吗?
答案 0 :(得分:4)
我认为你必须使用
ajaxSelectOptions: { cache: false }
jqGrid parameter为jqGrid使用的jQuery.ajax设置其他参数cache: false
,如果它从dataUrl
获取服务器的数据。
答案 1 :(得分:1)
我注意到缓存策略因浏览器而异(Chrome似乎具有最积极的缓存策略)。所有浏览器中的行为都会重复吗? Ctrl-F5有效吗?