如何告诉Ajax.ActionLink OnSuccess回调哪个元素启动了ajax

ken*_*ner 6 jquery unobtrusive-javascript razor asp.net-mvc-3

我希望我的剃刀视图看起来像这样

@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" })
Run Code Online (Sandbox Code Playgroud)

和我的javascript看起来像这样

function updateLetter(letter)
{
    $("#letter-" + letter).toggleClass('selected');
}
Run Code Online (Sandbox Code Playgroud)

我的想法是,如果我单击A链接,它将执行ajax并在该元素上切换类.我不确定如何将它连接起来.我错过了什么?

Dar*_*rov 8

首先修复你的Ajax.ActionLink重载,你的不会编译.

要传递参数,您可以这样做:

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

然后:

function updateLetter(letter)
{
    $("#letter-" + letter).toggleClass('selected');
}
Run Code Online (Sandbox Code Playgroud)

就个人而言,我不是Ajax.*助手的粉丝.我使用了一种由标准HTML组成的替代方法ActionLink:

@Html.ActionLink(
    "A", 
    "About", 
    null,
    new { 
        @class = "letter"
        id = "letter_A" 
    }
)
Run Code Online (Sandbox Code Playgroud)

我在一个单独的javascript文件中不引人注意地AJAXify:

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