捕获链接点击Asp.net MVC

时间:2012-01-17 06:26:39

标签: javascript jquery asp.net-mvc-3 client-side

我的视图中有很多链接,如下所示

  

retailerName1 ---------- ----------信息锚链路retailer1

     

retailerName2 ---------- ----------信息锚链路retailer2

     

retailerName3 ---------- ----------信息锚链路retailer3

现在,我想要的是在任何这些链接上捕获用户的点击,然后在服务器上,我想增加数据库中该特定零售商记录的clickCount字段。

为此,我想,我需要一些像jquery代码这样的客户端脚本,它应该发送转发器数据,然后在服务器上使用这些数据做进一步的操作。请告诉我这个将发送相应数据的jquery代码。

更新

这是链接代码

<a href="retailerURL.com" target ="_blank">anchor-Link-retailer3</a>

1 个答案:

答案 0 :(得分:1)

你的问题中你所谓的appropriate data并不是很清楚,但零售ID是否足够?你不需要javascript。生成链接时,您可以传递此零售商ID:

@foreach (var retailer in Model.Retailers)
{
    <div>
    @retailer.Name

    ... some info

    @Html.ActionLink(
        "some link text", 
        "someAction", 
        "someController", 
        new { retailerId = retailer.Id },
        null
    )
    </div>
}

在相应的控制器操作中,您可以使用此零售商ID执行您打算执行的操作:

public ActionResult SomeAction(int retailerId)
{
    ...
}

更新:

一旦点击链接,就有可能使用AJAX请求将零售商ID发送到您的控制器操作。为此,您将需要零售商ID。您可以在锚点上使用HTML5 data- *属性:

<a href="retailerURL.com" target ="_blank" class="retailer" data-retid="123" data-url="@Url.Action("SomeAction")">anchor-Link-retailer3</a>

然后您可以使用jQuery订阅所有这些链接的click事件并发送AJAX请求:

$(function() {
    $('.retailer').click(function() {
        var url = $(this).data('url');
        var retailerId = $(this).data('retid');
        $.post(url, { retailerId: retailerId });
    });
});

更新2:

另一种可能性是在控制器操作中执行重定向到零售商网站。这样你就不需要AJAX了:

@Html.ActionLink(
    "some link text", 
    "someAction", 
    "someController", 
    new { retailerId = retailer.Id },
    new { target = "_blank" }
)

并在控制器操作内部更新数据库,获取零售商网站并重定向:

public ActionResult SomeAction(int retailerId)
{
    // TODO: 
    // 1. fetch the retailer website given the id:
    // 2. update the database with the info
    // 3. redirect to the retailer website

    string retailerWebsite = ...
    return Redirect(retailerWebsite);
}