Вопрос

Давайте объясним контекст: у меня есть форма человека в диалоговом окне 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 );
}

Тогда у меня есть частичный следующий код, который создает сетку и пейджер

<%= 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}") %>

Чтобы включить 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);
        }
    });
});

Все работает очень хорошо, кроме одной вещи. Когда я нажимаю на ссылку на пьесу, на сервер есть бесконечный запрос, как вы можете увидеть на следующем скриншоте Fiddler. Что сейчас произойдет????alt text

Обновлять:Следуя совету Винзенца, я добавил event.stopPropagation() и return false Инструкции после вызова Ajax. Тогда у меня есть

  • Сначала щелкнул один раз по следующей ссылке пейджера (запрос 48), а Fiddler показал 1 запрос.
  • Нажал на предыдущую ссылку. Fiddler показывает два запроса (49 и 50)
  • Еще раз нажал по следующей ссылке. Отчеты Fiddler 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