Asp.net mvc 奇怪的问题支持Ajax的MVCContrib网格寻呼机

Asp.net mvc 奇怪的问题支持Ajax的MVCContrib网格寻呼机,asp.net-mvc,asp.net-mvc-2,jquery,mvccontrib,mvccontrib-grid,Asp.net Mvc,Asp.net Mvc 2,Jquery,Mvccontrib,Mvccontrib Grid,让我们来解释一下上下文:我在jquery对话框中有一个person表单,它有一些选项卡来分组与此人相关的信息(个人数据、地址、电子邮件、职位等) 其中一个选项卡通过对该控制器操作的ajax调用显示人员地址 [HttpGet] public ActionResult GetAddresses( int id, int? page ) { IEnumerable<AddressModel> list = _manager.GetAddressesByContact( id ).A

让我们来解释一下上下文:我在jquery对话框中有一个person表单,它有一些选项卡来分组与此人相关的信息(个人数据、地址、电子邮件、职位等)

其中一个选项卡通过对该控制器操作的ajax调用显示人员地址

[HttpGet]
public ActionResult GetAddresses( int id, int? page ) {
    IEnumerable<AddressModel> list = _manager.GetAddressesByContact( id ).AsPagination( page ?? 1, 2 );
    ViewData["__ContactID"] = id;
    return PartialView( "AddressList", list );
}
除了一件事,一切都很好。当我点击一个页面链接时,会有无限的请求发送到服务器,正如您从下面的Fiddler屏幕截图中看到的那样。会发生什么事????

更新: 根据Vinzenz的建议,我在ajax调用后添加了
事件.stopPropagation()
返回false
指令。那我有

  • 首先点击寻呼机的下一个链接(请求48),Fiddler显示1个请求
  • 单击上一个链接。Fiddler显示两个请求(49和50)
  • 再次单击下一个链接。Fiddler报告4个请求(51、52、53和54)
通常,如果我继续来回单击,则向服务器发出的请求数始终在增加….:(


出于测试原因,我会从这个事件处理程序返回false;,或者调用
event.stopPropagation();

可能是你的代码在其他地方发生了一些事情,你已经注册了相同的处理程序两次或更多次,它们以某种方式相互触发,或者其他什么。如果没有更多的信息,很难判断


但是,尝试使用我的建议,您将看到它是否有帮助。

我的建议是实时附加,即“实时附加”您的代码:

$(".paginationRight > a").live("click", function(event) {
    //stop the browser from going to the relevant URL
    event.preventDefault();
    $.ajax({
        type: "get",
        dataType: "html",
        url: this.href,
        data: {},
        success: function (response) {
            $("#addressListPlaceholder").html('').html(response);
        }
    });
});

在您定义选项卡的页面(“父页面”)上,而不是在局部视图上。

您好,谢谢您的回答。我已添加了您建议的代码。请查看我的问题编辑以了解详细信息。我认为您使用“live”注册处理程序。请改为单击:
$(“.paginationRight>a”)尝试此操作。单击(功能(事件){
在您提出第一个建议之前,我已尝试使用click和live注册处理程序,但问题始终存在。现在它似乎正在工作。再次感谢您的建议,我很想了解更多有关此方面的信息….:O说:
描述:为与当前选择匹配的所有元素的事件附加一个处理程序或者,现在和将来。
这里最有趣的部分是“…在未来”,似乎每次单击都会创建另一个具有.paginationRight类的元素,并将处理所有请求的处理程序分配给它。但是我有点困惑,为什么它们看起来都会被解雇。我唯一能想象的是是否有多个处理程序注册到同一个元素或其他元素。是的。我开始只为“将来”文本使用live,因为我在每个分页方法中都完全替换了表标记。正如您所说,问题是“为什么会触发这些请求…”。。。
$(".paginationRight > a").live("click", function(event) {
    //stop the browser from going to the relevant URL
    event.preventDefault();
    $.ajax({
        type: "get",
        dataType: "html",
        url: this.href,
        data: {},
        success: function (response) {
            $("#addressListPlaceholder").html('').html(response);
        }
    });
});
$(".paginationRight > a").live("click", function(event) {
    //stop the browser from going to the relevant URL
    event.preventDefault();
    $.ajax({
        type: "get",
        dataType: "html",
        url: this.href,
        data: {},
        success: function (response) {
            $("#addressListPlaceholder").html('').html(response);
        }
    });
});