让我们解释一下上下文:我在一个jQuery对话框中有一个人形式,该对话与与此人有关的小组信息(个人数据,地址,电子邮件,职位等)有一些标签。

一个选项卡显示,该人通过对此控制器操作的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 );
}

然后,我在部分的代码上有创建网格和Pager的代码

<%= Html.Grid(Model).Columns( column => {
    column.For(addr => addr.GetAddressTypeList().First(at => at.AddressTypeID == addr.AddressTypeID).Description).Named("Tipo");
    column.For( addr => ( addr.IsPostalAddress ) ? Html.Image( "/_assets/images/PostalAddress.gif", "Indirizzo per la corrispondenza" ) : "&nbsp;" ).Encode(false).Named("Posta");
    column.For(addr => addr.StreetAddress + "<br />" + addr.ZipCode + ", " + addr.City + "<br />" + 
        addr.GetProvinceList().First( p => p.ProvinceID == addr.ProvinceID).Description + ", " +
        addr.GetCountryList().First( c => c.CountryID == addr.CountryID).Name).Named("Indirizzo").Encode(false);
    column.For( addr => 
        "<a href='/Contact/EditAddress/" + addr.AddressID + "' class='ajaxLink' title='Modifica'><img src='/_assets/images/edit.png' alt='' /></a>"
        ).Attributes( style => "width:16px").Encode(false);
    column.For( addr =>
        "<a href='/Contact/DeleteAddress/" + addr.AddressID + "' class='ajaxLink' title='Elimina'><img src='/_assets/images/delete.png' alt='' /></a>"
        ).Attributes( style => "width:16px" ).Encode( false );
    } ).Attributes( @class => "table-list" )%>

<br />
<%= Html.Pager((IPagination)Model).First("Prima").Next("Successiva").Previous("Precedente").Last("Ultima").Format("Visualizzati {0}-{1} di {2}") %>

为了在Pager上启用Ajax,我使用了以下代码:

$(".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);
        }
    });
});

除了一件事,一切都很好。当我单击分页链接时,您可以从下面的提琴手屏幕截图中看到服务器的无限请求。会发生什么????alt text

更新:遵循Vinzenz的建议,我添加了 event.stopPropagation()return false Ajax通话后的说明。然后我有

  • 在Pager的下一个链接(请求48)中首次单击一次,而Fiddler显示了1个请求。
  • 单击上一个链接。提琴手显示两个请求(49和50)
  • 在下一个链接上再次单击。提琴手报告4请求(51、52、53和54)

通常,如果我继续来回单击服务器的请求数量总是在增加.... :(

alt text

有帮助吗?

解决方案

我出于测试原因 return 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);
        }
    });
});

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top