Функция Ajax не сохраняет положение прокрутки после перенаправления

62
7

Как сказано в заголовке, я написал функцию ajax, которая должна прокручиваться до позиции, которую пользователь перед перенаправлением.

Я написал alert для тестового сценария, и оно срабатывает, но свиток продолжает возвращаться к вершине, если я сделал ошибку здесь?

JavaScript:

$.ajax({
type: "GET",
url: "AdminListUsers.aspx?column=Disabled&direc=False&a=chstat&z=+",
success: function loadDoc() {
window.scrollTo(window.pageXOffset, window.pageYOffset);
}
});

С#:

var toggleUrl = "AdminListUsers.aspx?column=" + (IsClicked.FirstOrDefault().Key ?? "Name") + "&direc=" + (IsClicked.FirstOrDefault().Value) + "&a=chstat&q=" + id.ToString() + "&d=" + disabled + "&z=" + Server.UrlEncode(txtSearchFor.Text);

var hl = new HyperLink();
hl.Text = status;
hl.Style.Add(HtmlTextWriterStyle.Color, (disabled ? "red" : "green"));
hl.NavigateUrl = toggleUrl;
hl.Attributes.Add("onclick", "loadDoc();return true;");
cell.Controls.Add(hl);
tr.Cells.Add(cell);

спросил(а) 2021-01-28T03:03:49+03:00 3 месяца, 1 неделя назад
1
Решение
62

Проблема в том, что она фактически переходила к ссылке, указанной в гиперссылке. Затем он также пытается выполнить запрос ajax.

Если необходимо использовать ajax, нет необходимости указывать navigateURL, и поведение сценария по умолчанию для гиперссылки должно быть подавлено скриптом. В противном случае вы получите полное обновление страницы и запрос ajax jQuery одновременно. Поскольку у вас установлен jQuery, вы можете сделать это наиболее легко:

С#:

var hl = new HyperLink();
hl.Text = status;
hl.ID = "myLink";
hl.Style.Add(HtmlTextWriterStyle.Color, (disabled ? "red" : "green"));
hl.NavigateUrl = "#";
cell.Controls.Add(hl);
tr.Cells.Add(cell);

JS (с использованием ненавязчивой обработки событий):

$(document).ready(function() {
$("#<%= myLink.ClientID %>").click(function(event) {
event.preventDefault(); //stop the normal behaviour of the link
$.ajax({
type: "GET",
url: "AdminListUsers.aspx?column=Disabled&direc=False&a=chstat&z=+",
success: function() {
window.scrollTo(window.pageXOffset, window.pageYOffset);
}
});
});
});

Это остановит связь, из-за которой перенаправление всей страницы будет перенаправлено, и просто разрешите загрузку содержимого через ajax.

NB Если вы создаете несколько экземпляров гиперссылки в таблице, вам нужно будет использовать классы, а не идентификаторы, чтобы позволить jQuery найти его.

Однако я бы поставил под вопрос, что "AdminListUsers.aspx? Column = Disabled & direc = False & a = chstat & z = +" действительно возвращается. ormally, страница aspx возвращает всю HTML-страницу, включая теги <html>, <body> т.д. - если вы помещаете это внутри другого элемента, такого как <div>, это делает вашу страницу недействительной - вы не можете <html> теги <html>. Если вы хотите использовать ajax, вы должны использовать WebMethod (или другой тип веб-службы), чтобы возвращать только HTML, который должен быть фактически вставлен в элемент.

ответил(а) 2021-01-28T03:03:49+03:00 3 месяца, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема