Question

Expliquons le contexte: (. Données personnelles, adresses, e-mails, position, etc.) J'ai une forme de personne dans un dialogue jquery qui a des onglets pour des informations de groupe liées à cette personne

L'une des adresses onglet montrent les personne à travers un appel ajax à cette action de commande

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

j'ai sur la partie du code suivant qui crée la grille et le 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}") %>

Pour activer ajax sur le téléavertisseur que je l'ai utilisé le code suivant:

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

Tout fonctionne très bien, sauf une chose. Lorsque je clique sur un lien d'échange il y a demande infinie au serveur comme vous pouvez le voir sur la capture d'écran suivante Fiddler. Ce qui va se passer???? text alt

Mise à jour: À la suite de Vinzenz conseil que j'ai ajouté les instructions de event.stopPropagation() et return false après l'appel ajax. Ensuite, je dois

  • a d'abord cliqué une fois sur le lien suivant du téléavertisseur (demande 48) et Fiddler a montré une demande.
  • cliqué sur le lien précédent. Fiddler montre deux demande (49 et 50)
  • cliquée à nouveau sur le lien suivant. Rapports Fiddler 4 demande (51, 52, 53 et 54)

En général, si je continue en cliquant et venir le nombre de demandes adressées au serveur est toujours de plus en plus ....: (

text alt

Était-ce utile?

La solution

Je pour des raisons tests return false; de ce gestionnaire d'événements, ou appelez event.stopPropagation();

Il pourrait être qu'il ya quelque chose qui se passe avec votre code ailleurs que vous avez enregistré deux fois ou plus le même gestionnaire et ils en quelque sorte déclencher l'autre ou autre chose. Il est difficile de dire sans avoir plus d'informations.

essayez toutefois d'utiliser mes suggestions et vous verrez si ça aide.

Autres conseils

ma suggestion est de vivre attacher est de « fixer en direct » votre code:

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

sur la page où vous avez défini l'onglet (la "page parent"), et non sur la vue partielle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top