Ajax函数在重定向后不保存滚动位置

正如标题所述,我编写了一个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); } }); 

C#:

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

问题是因为它实际上导航到超链接中指定的链接。 然后它也试图做ajax请求。

如果要使用ajax,则不需要指定navigateURL,并且脚本需要禁止超链接的默认行为。 否则,您将同时获得整页刷新 jQuery ajax请求。 既然你已经安装了jQuery,你最容易做到这一点:

C#:

 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加载内容。

注意如果要在表中创建多个超链接实例,则需要使用类而不是ID来允许jQuery找到它。

但是,我会质疑“AdminListUsers.aspx?column = Disabled&direc = False&a = chstat&z = +”实际返回的内容。 或者,一个aspx页面返回一个完整的HTML页面,包括标签等 – 如果你把它放在另一个元素如

,它会使你的页面无效 – 你不能嵌套标签。 如果要使用ajax,则应使用WebMethod(或其他类型的Web服务)仅返回实际应插入元素的HTML。