2011-09-14 3 views
1

Je suis novice dans le développement web et je travaille sur ma première application ASP.NET MVC 3. J'utilise jqGrid et j'ai remarqué que l'actualisation de la page n'actualise pas les valeurs dans la liste déroulante jusqu'à ce que j'ouvre la même page dans un autre onglet, puis l'actualisation du premier onglet récupère les valeurs modifiées.La liste déroulante jqGrid dataUrl n'est pas rafraîchissante

J'ai une action de contrôleur qui ressemble à ceci:

public JsonResult FavoriteToppings() 
{ 
    var all = GetFavoriteToppings(); 
    return Json(all, JsonRequestBehavior.AllowGet); 
} 

et j'ai la partie de la définition jqGrid ressemble à ceci:

{ 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'] 
    } 
}, 

et createSelectList ressemble à ceci:

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>'; 
} 

Je l'ai remarqué lors de la modification d'un des noms de recouvrement. J'ai changé le "Hot Fugde" mal orthographié à "Hot Fudge" et l'a sauvé. Les données sous-jacentes dans la table sont mises à jour pour afficher le remplissage correctement orthographié (c'est-à-dire, toutes les lignes reflètent correctement la modification) lorsque j'actualise la page, mais pas la liste déroulante du filtre. Cette action n'est pas appelée du tout après la première fois pour prendre le changement.

Lorsque j'ouvre la même page dans une autre page du navigateur, l'action est appelée. Après cela, si vous actualisez le premier onglet, l'entrée correctement orthographiée s'affiche dans la liste de sélection.

Peut-être que je vais juste à ce sujet incorrectement. Des conseils?

Répondre

4

Je pense que vous devez utiliser

ajaxSelectOptions: { cache: false } 

jqGrid parameter pour régler le paramètre supplémentaire cache: false pour le jQuery.ajax utilisé par jqGrid si elle obtenir les données du serveur de la dataUrl.

+0

@itsmatt: Vous êtes les bienvenus! C'est un problème de tem où la solution est très simple, mais pour laquelle on peut passer beaucoup de temps. :-) – Oleg

1

J'ai remarqué que les stratégies de cache varient d'un navigateur à l'autre (le chrome semble avoir la stratégie de mise en cache la plus agressive). Est-ce que le comportement se répète dans tous les navigateurs? Ctrl-F5 fonctionne?

+0

Semble être uniquement IE. – itsmatt

Questions connexes