对在for循环中使用ActionLink进行ajax调用感到困惑

时间:2014-08-29 15:40:07

标签: javascript jquery ajax asp.net-mvc

我在局部视图中有以下代码:

foreach (var documentFolder in Model.DocumentFolders){
    <span id="Folder">
        @Html.ActionLink(documentFolder.DisplayNameProperty, "ControllerAction", "Controller", null, new{@name = documentFolder.IDProperty, @id = "lbGetFile", @class = "textLink", @style = "text-decoration: underline; color: blue; cursor: pointer;"})
    </span>
}

我有这个jquery代码:

$("#lbGetFile").click(function (){
        debugger;
        $.ajax({
            url: this.href,
            type: "POST",
            data: { selectedFolderID: $("#lbGetFile").attr('name') },
            error: function (jqXHR, textStatus, errorThrown) {
                debugger;
            },
            success: function (data) {
                debugger;
            }
        });
        return false;
    });

我注意到只有我的for循环中的第一项才能正常返回成功函数。它可能是因为for循环中的每个项都具有相同的id,但我不知道该怎么办?

另外,我认为编辑模板应该在这里工作得更好,而不是for循环,但成功的ajax调用是否可以正确地重写编辑器模板区域?

1 个答案:

答案 0 :(得分:0)

你的问题确实是由于同一个id。不仅如此 - 您的所有span代码都具有相同的ID Folder。完全重新访问它并从代码中删除id可能是个好主意。所以标记就是这样的:

foreach (var documentFolder in Model.DocumentFolders){
    <span class="folder">
        @Html.ActionLink(documentFolder.DisplayNameProperty, "ControllerAction", "Controller", null, new{@name = documentFolder.IDProperty, @class = "textLink", @style = "text-decoration: underline; color: blue; cursor: pointer;"})
    </span>
}

请注意,不再有ID,而是使用类。类允许轻松重复并且不会引起冲突。

至于javascript - 这是你如何查询:

$("span.folder .textLink").click(function (){

这将选择您需要的所有链接。而且您已经知道可以在处理程序中使用this来引用当前单击的元素。