Странная проблема Ajax включил пейджер MVCContrib Grid - PullRequest
2 голосов
/ 14 октября 2010

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

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

<%= 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.Затем я

  • впервые щелкнул один раз по ссылке Next пейджера (запрос 48), и Fiddler показал 1 запрос.
  • Кликнул по предыдущей ссылке.Fiddler показывает два запроса (49 и 50)
  • Снова щелкнул ссылку Next.Fiddler сообщает о 4 запросах (51, 52, 53 и 54)

Как правило, если я продолжаю нажимать вперед и назад, количество запросов к серверу всегда увеличивается ....: (

alt text

Ответы [ 2 ]

1 голос
/ 15 мая 2012

Мое предложение заключается в том, чтобы прикрепить в реальном времени, чтобы "прикрепить в реальном времени" ваш код:

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

на странице, где вы определили вкладку («родительская страница»), а не в частичном представлении.

1 голос
/ 14 октября 2010

Я бы по причинам теста return false; из этого обработчика событий или позвонил бы event.stopPropagation();

Возможно, что-то происходит с вашим кодом где-то еще, если вы дважды зарегистрировали один и тот же обработчик илибольше раз, и они как-то вызывают друг друга или что-то еще.Трудно сказать, не имея больше информации.

Однако попробуйте использовать мои предложения, и вы увидите, поможет ли это.

...