2011-07-23 2 views
6

Je veux mon point de vue de rasoir pour ressembler à ceciComment savoir le rappel de Ajax.ActionLink quel élément a lancé la ajax

@Ajax.ActionLink("A", "Buy", new AjaxOptions() { HttpMethod = "Post", OnSuccess = "updateLetter" }, new { id = "letter-A" }) 
@Ajax.ActionLink("B", "Buy", new AjaxOptions() { HttpMethod = "Post", OnSuccess = "updateLetter" }, new { id = "letter-B" }) 
@Ajax.ActionLink("C", "Buy", new AjaxOptions() { HttpMethod = "Post", OnSuccess = "updateLetter" }, new { id = "letter-C" }) 

et mon javascript pour ressembler à quelque chose comme ça

function updateLetter(letter) 
{ 
    $("#letter-" + letter).toggleClass('selected'); 
} 

l'idée étant que si je clique sur le lien A, il fera l'ajax et basculera la classe sur cet élément. Je ne suis pas sûr de savoir exactement comment le brancher. Qu'est-ce que je rate?

Répondre

7

Commencez par corriger votre surcharge Ajax.ActionLink car la vôtre ne sera pas compilée.

Et pour passer des paramètres que vous pouvez faire:

@Ajax.ActionLink(
    "A", 
    "About", 
    null, 
    new AjaxOptions { 
     HttpMethod = "POST", 
     OnSuccess = "updateLetter('A')" 
    }, 
    new { 
     id = "letter_A" 
    } 
) 

puis:

function updateLetter(letter) 
{ 
    $("#letter-" + letter).toggleClass('selected'); 
} 

Personnellement, je ne suis pas fan des aides Ajax.*. J'utilise une approche alternative qui consiste en une norme HTML ActionLink:

@Html.ActionLink(
    "A", 
    "About", 
    null, 
    new { 
     @class = "letter" 
     id = "letter_A" 
    } 
) 

que je AJAXify dans un discrètement fichier javascript séparé:

$(function() { 
    $('.letter').click(function() { 
     var $letter = $(this); 
     $.post(this.href, function(result) { 
      $letter.toggleClass('selected'); 
     }); 
    }); 
}); 
Questions connexes