Pregunta

Vamos a explicar el contexto: (. Los datos personales, direcciones, correos electrónicos, mensajes de posición, etc.) Tengo una forma dentro de una persona de diálogo jQuery que tiene algunas fichas a la información de grupo relacionadas con esta persona

Uno de los pestaña muestran las direcciones de persona a través de una llamada AJAX a esta acción del controlador

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

entonces tengo en la parcial el siguiente código que crean la rejilla y el 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}") %>

Para habilitar el Ajax en el localizador He utilizado el siguiente código:

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

Todo funciona muy bien, excepto una cosa. Cuando hago clic en un enlace de paginación hay pedido infinito al servidor como se puede ver en la siguiente captura de pantalla violinista. ¿¿¿¿Que es lo que va a pasar???? text alt

Actualización: Siguiendo el consejo Vinzenz He añadido las instrucciones event.stopPropagation() y return false después de la llamada AJAX. Entonces tengo

  • primera vez que se hace clic en el enlace del buscapersonas (petición 48) y violinista mostró Siguiente 1 petición.
  • clic en el enlace anterior. shows Fiddler dos petición (49 y 50)
  • vuelva a hacer clic en el enlace siguiente. Fiddler informa 4 petición (51, 52, 53 y 54)

En general, si sigo haciendo clic en un lado a otro el número de peticiones hechas al servidor está siempre en aumento ....: (

text alt

¿Fue útil?

Solución

Me razones para la prueba return false; de este controlador de eventos, o llame event.stopPropagation();

Podría ser que hay algo pasando con su código en otro lugar que se ha registrado el mismo manejador de dos veces o más veces y que de alguna manera desencadenar entre sí o lo que sea. Es difícil de decir sin tener más información.

Sin embargo intenta utilizar mis sugerencias y verá si ayuda.

Otros consejos

mi sugerencia es vivir adjuntar es "vivir conectar" su código:

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

en la página donde se definió la pestaña (la "página principal"), no en la vista parcial.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top