2011-07-23 7 views
6

Quiero mi punto de vista de afeitar para mirar algo como estoCómo saber Ajax.ActionLink onSuccess devolución de llamada qué elemento inició el 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" }) 

y mi javascript para ser algo como esto

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

la idea Siendo que si hago clic en el enlace A, haré el ajax y alternaré la clase en ese elemento. Aunque no estoy seguro exactamente de cómo conectarlo. ¿Qué me estoy perdiendo?

Respuesta

7

Primero corrija su sobrecarga de Ajax.ActionLink ya que la suya no se compilará.

y para pasar los parámetros que usted podría hacer esto:

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

y luego:

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

Personalmente no soy un fan de los Ajax.* ayudantes. Yo uso un enfoque alternativo que consiste en un estándar HTML ActionLink:

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

cual discretamente AJAXify en un archivo JavaScript independiente:

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