Domanda

facciamo spiegare il contesto: (. Dati anagrafici, indirizzi, email, posizione, ecc) Ho una forma persona all'interno di una finestra di dialogo jQuery che ha alcune schede a informazioni di gruppo relative a questa persona

Una delle scheda mostrano gli indirizzi persona attraverso una chiamata AJAX a questa azione di controllo

[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 );
}

poi ho sul parziale il seguente codice che creano la griglia e il cercapersone

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

Per abilitare ajax sul pager ho usato il seguente codice:

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

Tutto funziona molto bene, tranne una cosa. Quando clicco su un link di paginazione ci sono infiniti richiesta al server, come si può vedere dalla seguente Fiddler screenshot. Cosa succederà???? alt text

Aggiornamento: Seguendo il consiglio Vinzenz ho aggiunto le istruzioni event.stopPropagation() e return false dopo la chiamata AJAX. Poi ho

  • primo cliccato una volta sul collegamento successivo del cercapersone (richiesta 48) e Fiddler mostrava 1 richiesta.
  • cliccato sul link precedente. spettacoli fiddler due Request (49 e 50)
  • Cliccato nuovo sulla barra di navigazione sopra. Fiddler riporta 4 richiesta (51, 52, 53 e 54)

In generale se continuo cliccando avanti e indietro il numero di richieste fatte al server è sempre in aumento ....: (

alt text

È stato utile?

Soluzione

Vorrei per il test ragioni return false; da questo gestore di eventi, oppure chiamare event.stopPropagation();

E 'possibile che ci sia qualche cosa sta succedendo con il tuo codice da qualche altra parte che si è registrato lo stesso gestore di due o più volte e in qualche modo innescare un l'altro o qualsiasi altra cosa. E 'difficile da dire, senza avere più informazioni.

Tuttavia tenta di utilizzare i miei suggerimenti e vedrete se aiuta.

Altri suggerimenti

Il mio suggerimento è quello di vivere attaccare è quello di "vivere collegare" il tuo codice:

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

nella pagina in cui è stata definita la scheda (la "pagina padre"), non sulla vista parziale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top