如何在Jquery中检索链接的ID?

时间:2011-09-24 20:24:27

标签: jquery asp.net-mvc asp.net-mvc-3

我遇到这种情况......请考虑以下情况

1)来自数据库的值,例如:personName(数据库中的id为3)

2)我通过@Html.ActionLink

建立了“personName”的链接

3)链接ID为“lnkName”

我想检索单击lnkName时personName的id,即3。请帮帮我..

这是我的链接代码..

@foreach (var item in Model)
{

    <h3>  @Html.ActionLink(item.personName, "Details", "Post", new { Id = item.personID } , new { @id = "lnkName" } ) </h3> 

这是我到目前为止的Jquery代码......

$(document).ready(function () {
        $('#lnkName').click(function () {
            $.ajax({
                    url: @Url.Action("AddViews","Post")
                    data: // how can i retrieve the id of the clicked link which is 3
                });
        });
    });

2 个答案:

答案 0 :(得分:2)

以应有的方式生成链接,直接在href属性中包含正确的url。这样你就不用担心了:

@Html.ActionLink(
    item.personName, 
    "AddViews", // <!-- modify the action so that it directly points to the correct one
    "Post", 
    new { id = item.personID }, 
    new { @class = "lnkName" } // <!-- Notice that I use a class here instead of an id because ids must be unique in the DOM and in your code you have multiple links with the same id resulting into invalid markup
)

然后在一个单独的javascript文件中你可以不引人注意地AJAX化这个锚:

$(document).ready(function () {
    $('.lnkName').click(function () {
        $.ajax({
            url: this.href,
            success: function(result) {

            }
        });

        // that's important in order to cancel the default action
        // or the browser will simply redirect to the url and the AJAX
        // call will never have time to execute
        return false;
    });
});

这样你就可以将你的javascript放在一个完全独立的js文件中。当然,从缩小它,抓取它,缓存它甚至从CDN服务它都有好处。总是尝试将javascript放在单独的文件中,并根据服务器端表达式(例如@Url.Action)来避免它们。我告诉你一种避免这种不受欢迎的依赖的方法。

答案 1 :(得分:2)

点击链接后,您可以通过id变量获取this

$(document).ready(function () {
        $('#lnkName').click(function () {
            var id = this.id;     // <=== you can fetch the id of the clicked link via "this"
            $.ajax({
                    url: @Url.Action("AddViews","Post"),
                    data: id
                });
            return(false);
        });
});

如果它不是你想要的CSS ID(我在你的问题中不确定),而是像personID这样的其他一些数据,那么你应该将其他数据作为数据属性放在链接上使用$(this).data("xxx")使用jQuery标记和获取该属性。

例如,如果服务器端代码生成的链接如下所示:

<a href="xxx" class="lnkName" data-personID="3">

然后,在你的点击处理程序中,你可以像这样获取那个personID(然后你必须将它放入你的ajax参数,但是你希望它被发送):

$(document).ready(function () {
        $('#lnkName').click(function () {
            var personID = parseInt($(this).attr("data-personID"), 10);  // <===
            $.ajax({
                    url: @Url.Action("AddViews","Post"),
                    data: personID
                });
            return(false);
        });
});