2011-09-14 171 views
1

我是新来web开发和工作在我的第一个ASP.NET MVC 3应用程序。我使用jqGrid,并注意到刷新页面不会刷新下拉列表中的值,直到我打开另一个选项卡中的同一页面,然后刷新第一个选项卡将选取更改后的值。jqGrid dataUrl下拉列表不刷新

我有一个控制器的动作,看起来像这样:

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”并将其保存。当我刷新页面但过滤器下拉不显示时,表格中的底层数据得到更新以显示拼写正确的顶部(即,所有行正确反映了更改)。在第一次接受变更后,这个行为根本不会被调用。

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

也许我只是在错误地解决这个问题。任何指导?

回答

4

我认为你必须使用

ajaxSelectOptions: { cache: false } 

jqGrid parameter设置附加参数cache: false为使用的jqGrid如果从dataUrl服务器获取数据的jQuery.ajax

+0

@itsmatt:不客气!这是一个来自问题的解决方案非常简单,但人们可以花费很多时间。 :-) – Oleg

1

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

+0

似乎只是IE浏览器。 – itsmatt