Frage

Lassen Sie sich den Kontext erklären: (. Persönliche Daten, Adressen, E-Mails, Position, etc.) ich eine Person Form in einem jquery Dialog habe, die einige Registerkarten Gruppe Informationen zu dieser Person

bezogen hat

Einer der Reiter zeigt die Person Adressen durch einen Ajax-Aufruf dieser Controller-Aktion

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

dann habe ich über die teilweise den folgenden Code, die das Netz und den Pager

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

Damit Ajax auf dem Pager ich den folgenden Code verwendet:

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

funktioniert alles sehr gut bis auf eine Sache. Wenn ich auf eine Paging-Link klicken, gibt es unendlich viele Anfrage an den Server, wie Sie aus der folgenden Fiddler Screenshot sehen. Was wird passieren???? alt text

Update: Nach Vinzenz Beratung Ich habe die event.stopPropagation() und return false Befehle nach dem Ajax-Aufruf hinzugefügt. Dann habe ich

  • zuerst geklickt einmal auf dem Weiter-Link des Pagers (Anfrage 48) und Fiedler zeigte 1 Anfrage.
  • klickte auf den Zurück-Link. Fiddler zeigt zwei Anfrage (49 und 50)
  • klickte wieder auf den Weiter-Link. Fiddler Berichte 4 Anfrage (51, 52, 53 und 54)

Generell gilt: Wenn ich weiter hin und her die Anzahl der Anfragen an den Server zu klicken, wird immer größer ....: (

alt text

War es hilfreich?

Lösung

Ich würde für Test return false; Gründen von diesem Event-Handler, oder rufen Sie event.stopPropagation();

Es könnte sein, dass es etwas, was mit Ihrem Code geht woanders, dass Sie die gleichen Handler registriert haben zweimal oder mehrmals und lösen sie irgendwie miteinander oder was auch immer. Es ist schwer zu sagen, ohne weitere Informationen mit.

Allerdings versuchen, meine Vorschläge zu verwenden, und Sie werden sehen, ob es hilft.

Andere Tipps

mein Vorschlag anhängen zu leben ist "live anhängen" Ihr 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);
        }
    });
});

auf der Seite, wo Sie die Registerkarte definiert (die „übergeordnete Seite“), nicht auf der Teilansicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top