2011-05-25 3 views
2

J'ai une liste de "trucs" dans une table, et j'ai un lien Détails dans chaque ligne qui va charger les détails de l'élément dans une rangée cachée sous chaque ligne visible, cliquez à nouveau sur le lien pour masquer les détails de l'élément. L'affichage/masquage se fait avec jQuery simpleAnnuler MVC Ajax.Actionlink basé sur une condition

Actuellement le lien de détails est un Ajax.Actionlink() qui appelle l'action désignée.
Tout fonctionne correctement, sauf quand je veux cacher les détails, il appelle à nouveau l'action, qui appelle la logique, qui appelle la base de données.
Évidemment, c'est une perte de ressources, donc je voudrais un moyen d'annuler la requête ajax quand une condition est remplie; la condition étant que le conteneur "details" est visible.

@Ajax.ActionLink("Details", "DetailsPartial", 
       new AjaxOptions { 
         OnBegin = "function(){ 
          checkLoaded('" + string.Format("DetailContainer{0}", item.Id) + "'); 
         }", 
       HttpMethod = "GET", 
       UpdateTargetId = string.Format("Detail{0}", item.Id), 
       OnSuccess = "function(){ 
           showElement('" + string.Format("DetailContainer{0}", item.Id) + "'); 
          }", 
       InsertionMode = InsertionMode.Replace 
       }) 

Je pense que je devrais faire le travail avec OnBegin, mais je n'ai pas encore trouver la commande magique qui annule l'appel ajax.
Avec la fonction checkLoaded() je vérifie .css('display') == 'none' pour l'ID d'élément passé, et donc j'aurais besoin d'une annulation là-dedans.

J'ai cherché une solution pendant un certain temps, mais je n'en ai pas trouvé un, peut-être parce que je ne sais pas comment le demander intelligemment. L'aide est appréciée.

Répondre

3

Si vous souhaitez annuler l'action, il vous suffit de renvoyer false dans la méthode OnBegin.

@Ajax.ActionLink("Details", "DetailsPartial", 
       new AjaxOptions { 
         OnBegin = "function(){ 
          return !checkLoaded('" + string.Format("DetailContainer{0}", item.Id) + "'); 
         }", 
       HttpMethod = "GET", 
       UpdateTargetId = string.Format("Detail{0}", item.Id), 
       OnSuccess = "function(){ 
           showElement('" + string.Format("DetailContainer{0}", item.Id) + "'); 
          }", 
       InsertionMode = InsertionMode.Replace 
       }) 
+0

vous m'avez donné une nouvelle perspective, merci – romeozor

+2

ne semble pas fonctionner. J'appelle une boîte de dialogue de confirmation et retourne le résultat. Même si l'utilisateur choisit Annuler et false est renvoyé, les actions passent toujours par :( – Alex

1

Je face à la même question: requête AJAX exécutée même si la fonction anonyme de réponse précédente retourne faux. Cela se produit parce que le contenu d'OnBegin est enveloppé dans la fonction anonyme, et si cette fonction renvoie false, la requête AJAX annule. Cela a résolu mon problème:

... 
OnBegin = "return function(){ 
    return !checkLoaded('" + string.Format("DetailContainer{0}", item.Id) + "'); 
}", 
... 
Questions connexes