Как сообщить Ajax.ActionLink OnSuccess обратный вызов, какой элемент инициировал ajax - PullRequest
6 голосов
/ 24 июля 2011

Я хочу, чтобы мой вид бритвы выглядел примерно так

@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" })

и мой JavaScript, чтобы выглядеть примерно так

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

идея заключается в том, что если я нажму на ссылку A, она выполнит ajax и переключит класс этого элемента. Я не уверен точно, как подключить это все же. Чего мне не хватает?

1 Ответ

8 голосов
/ 24 июля 2011

Сначала исправьте перегрузку Ajax.ActionLink, так как ваша не будет компилироваться.

И для передачи параметров вы можете сделать это:

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

, а затем:

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

Лично я не фанат Ajax.* помощников.Я использую альтернативный подход, который состоит из стандартного HTML ActionLink:

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

, который я ненавязчиво AJAXify в отдельном файле JavaScript:

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