2010-11-26 2 views
1

Je suis très nouveau au développement web (environ un mois) et j'ai rencontré quelque chose d'étrange. J'utilise VS2010, MVC 3 Razor pour créer une application simple.MVC 3 Razor dynamiquement ajouté Ajax.Action Link Fonctionne seulement la première fois dans IE8

J'ai deux tables contenant le même type d'information. Comme dans les tableaux A et B, les utilisateurs sont les mêmes. La Différence étant, le Tableau A a les utilisateurs qui sont dans le "Rôle", et la table B contient les utilisateurs qui ne sont pas dans le "Rôle".

Les deux tables ont deux colonnes, l'une avec le nom d'utilisateur, l'autre contenant un Ajax.ActionLink. Donc, pour ajouter un utilisateur à la table "B", je clique sur "Ajax.Actionlink" dans le tableau "A". L'option "add" est sauvegardée via l'action MVC, et je déplace la ligne Table en utilisant l'événement AjaxOption OnSuccess. L'événement OnSuccess, fondamentalement, déplace la ligne, et modifie Ajax.ActionLink de sorte que ActionLink de la ligne utilisateur nouvellement ajouté supprimera l'utilisateur.

J'espère que c'est clair.

Tout cela fonctionne très bien. Je peux ajouter l'utilisateur "A" à la table "A" et tout fonctionne bien. Je peux enlever l'utilisateur "A" du tableau "A" au tableau "B" et tout va bien. Mais je ne peux pas rajouter l'utilisateur A à la table "A". Le OnSuccess s'exécute, donc la ligne est en mouvement, mais l'événement Action n'est pas appelé. Donc, si je rafraîchis l'écran, je peux voir le mouvement n'a pas réellement lieu. c'est la même chose si je commence avec l'utilisateur "B" sur la table "B". En outre, une actualisation de page (F5) ne corrige pas les liens, le reste est brisé jusqu'à ce que je ferme et rouvre la page.

Tout semble bien dans le HTML, il montre dans la barre d'état que lorsque je clique sur le lien, le href correct est appelé, mais fiddler n'enregistre aucun appel et l'action n'est pas appelée.

Je suppose que j'ai une sorte de problèmes de liaison, mais je suis perdu ici. Tout fonctionne bien dans Firefox

S'il vous plaît aider. Code ci-dessous, avec commentaires ajoutés. Rappelez-vous que cela fonctionne pour ajouter et supprimer, supprimer et ajouter, mais rajouter et re-supprimer seulement appelle la fonction, mais n'appelle pas l'action. Donc, je sais que les actions sont épelées correctement, etc.

//// element is the ID of the element i am Moving 
//// targetElement is the ID of the tbody i am moving the element to 
function move_element(element, targetElement) { 
    try 
    { 
     //// get the HTM 
     var elementHTML = $("tr[id=" + element + "]").children(".Action").html(); 
     //// based on the tbody id 
     switch (targetElement) 
     { 
     case "AssignedToGroup": 
      //// Change the target body for next call to this function 
      elementHTML = elementHTML.replace("AssignedToGroup", "UnassignedToGroup"); 
      //// change th action name 
      elementHTML = elementHTML.replace("AddGroupRole", "DeleteGroupRole"); 
      //// change the display label 
      elementHTML = elementHTML.replace("Assign", "Remove"); 
      break; 
     case "UnassignedToGroup": 
      elementHTML = elementHTML.replace("UnassignedToGroup", "AssignedToGroup"); 
      elementHTML = elementHTML.replace("DeleteGroupRole", "AddGroupRole"); 
      elementHTML = elementHTML.replace("Remove", "Assign"); 
      break; 
    } 
    //// Create the new Ajax <td> element 
     $("tr[id=" + element + "]").children(".Action").replaceWith("<td class='Action'>" + elementHTML + "</td>") 
     //// Add the row to the other body 
     $("tr[id=" + element + "]").appendTo($("tbody[id=" + targetElement + "]")); 
    } 
    catch (e) 
    { 
    alert(e.Message); ////NO ERROR IS RAISED 
    } 
} 

Répondre

1

Je regardais une question similaire, vous avez eu et trouvé une solution ici: Cache issue with Ajax.ActionLinks Pour résumer:

  • Il a été suggéré d'appeler ceci: $.ajaxSetup({ cache: false }); Si vous utilisez le support de javascript discret pour jquery. Une autre suggestion consistait à utiliser "HttpMethod = "POST" dans les options AjaxOptions .

En tout cas j'espère que cela peut vous aider ou quelqu'un d'autre, alors je l'ai posté ici.

1

Impossible de comprendre cela. Donc à la fin j'ai juste utilisé jquery.ajax à la place.

Questions connexes