在updatepanel部分回发后维护页面滚动位置

我是ASP.NET的初学者,在部分回发UpdatePanel后,我在维护页面的滚动位置时遇到问题。 我尝试在设置MaintainScrollPositionOnPostback="true" ,但它没有做到这一点。 请注意我正在使用(并且必须使用)FireFox。

任何帮助,将不胜感激。 谢谢! 这是我的代码:

    


这看起来像是你问题的答案。 作为一个加号; 它似乎适用于每个浏览器而不仅仅是FF。

http://www.c-sharpcorner.com/Blogs/11804/maintain-scroll-position-on-postback-within-updatepanel.aspx

如果您使用IE,那么它非常简单,只需将代码放入您的页面指令中即可。

 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" MaintainScrollPositionOnPostback="true" %> 

但它不适用于Firefox,因为您必须在网站中添加一个浏览器文件

右键单击解决方案资源管理器>添加新项

选择“浏览器文件”并将其添加到App_Browsers文件夹。

将MaintainScrollPositionOnPostbackfunction添加到此浏览器文件,如下所示。

        

有时这也行不通,

然后一个简单的解决方案只需在网格和onpostback之后添加一个空白的Update面板,只需将焦点放在该更新面板上即可在任何浏览器中使用。 在cs postbackevent updatepanel1.Focus();

如有任何问题,请随时提出或任何修改回复。

虽然我知道你不熟悉javascript,但我仍然建议给你这个答案,因为在.net中没有内置的解决方案,但是你可以用javascript来解决它。 不要担心Javascript不强硬,是Web开发的重要组成部分之一。 所以试一试吧。 可能会帮助你。

您可以参考此页面: 在updatepanel部分回发后维护页面滚动位置

 
<%-- Some stuff which would cause a partial postback goes here --%>

您可以将焦点设置在您想要在屏幕上看到的控件上。

例如,如果dropdownlist“ddlCity”是导致回发的控件,则在下拉列表SelectedIndexChanged代码后执行以下操作:

ddlCity.Focus();

我能够通过以下hack解决类似的问题:

将HiddenField Control添加到您正在使用的页面或控件中。确保将ClientIDMode设置为静态,以便可以在JavaScript中轻松访问它。 我们将使用JavaScript来更新此控件:

  

还添加一个面板控件作为我们将插入一些javascript的目标:

  

添加以下JavaScript。 使用window.onscroll函数,我们正在更新我们的HiddenField控件。 updateScrollPosition函数将从我们的C#代码后面调用:

  

创建一个新的C#类并添加以下方法。 这将允许我们从C#中的代码隐藏中插入一些Javascript:

 public static class ClientScript { public static void InsertScript(string script, Control target) { HtmlGenericControl s = new HtmlGenericControl(); s.TagName = "script"; s.InnerHtml = script; target.Controls.Add(s); } } 

现在,在您的控件或页面的代码中,使用我们创建的静态类将javascript插入到pnlScriptRunner中,使用ASP.NET HiddenField Control中的值调用JavaScript函数“updateScrollPosition(value)”:

  protected void btnRotate_Click(object sender, EventArgs e) { //Do stuff with controls in your update panel here, then: ClientScript.InsertScript("updateScrollPosition(" + scrollPosition.Value + ");", pnlScriptRunner); UpdatePanel1.Update(); } 

我的btnRotate_Click事件在更新面板中注册为触发器:

   Image Preview: 




以下参考是必要的:

 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; 

希望这有帮助!