jqGrid dataUrl下拉列表没有刷新

时间:2011-09-14 19:59:00

标签: asp.net-mvc asp.net-mvc-3 jqgrid

我是网络开发的新手,并且正在使用我的第一个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”并将其保存。当我刷新页面但过滤器下拉列表没有时,表中的基础数据会更新以显示正确拼写的顶部(即,所有行都正确反映了更改)。在第一次接受改变之后,根本没有调用该动作。

当我在浏览器的不同页面中打开同一页面时,会调用该操作。之后,刷新第一个选项卡将导致正确拼写的条目显示在选择列表中。

也许我只是错误地解决这个问题。有什么指导吗?

2 个答案:

答案 0 :(得分:4)

我认为你必须使用

ajaxSelectOptions: { cache: false }

jqGrid parameter为jqGrid使用的jQuery.ajax设置其他参数cache: false,如果它从dataUrl获取服务器的数据。

答案 1 :(得分:1)

我注意到缓存策略因浏览器而异(Chrome似乎具有最积极的缓存策略)。所有浏览器中的行为都会重复吗? Ctrl-F5有效吗?