Давайте объясним контекст: у меня есть личная форма в диалоге 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" ) : " " ).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.Что сейчас произойдет????
Обновление: Следуя советам Винценца, я добавил инструкции event.stopPropagation()
и return false
после вызова ajax.Затем я
- впервые щелкнул один раз по ссылке Next пейджера (запрос 48), и Fiddler показал 1 запрос.
- Кликнул по предыдущей ссылке.Fiddler показывает два запроса (49 и 50)
- Снова щелкнул ссылку Next.Fiddler сообщает о 4 запросах (51, 52, 53 и 54)
Как правило, если я продолжаю нажимать вперед и назад, количество запросов к серверу всегда увеличивается ....: (