asp.net维护后如何正确使用jquery.animate页面滚动ScrollPositionOnPostback

asp.net维护后如何正确使用jquery.animate页面滚动ScrollPositionOnPostback,jquery,asp.net,html,scroll,Jquery,Asp.net,Html,Scroll,我正在尝试在用户单击我的ASP.NET按钮后生成“页面滚动动画” 非常简单的方法: String script = "<script type=\"text/javascript\">" + "\n" + "$(document).ready(function() {" + "\n" + "var destination = $('#" + lblMessage.ClientID + "').of

我正在尝试在用户单击我的ASP.NET按钮后生成“页面滚动动画”

非常简单的方法:

String script = "<script type=\"text/javascript\">" + "\n" +
                    "$(document).ready(function() {" + "\n" +
                        "var destination = $('#" + lblMessage.ClientID + "').offset().top;" + "\n" +
                        "alert($('html, body').scrollTop());" + "\n" +
                        "$('html, body').animate({ scrollTop: destination-20}, 500 );" + "\n" + 
                    "});" +
                "</script>";
ClientScript.RegisterClientScriptBlock(this.GetType(), "scrollToMessage", script);
字符串脚本=”“+”\n+
$(文档).ready(函数(){“+”\n+
“var destination=$('#“+lblMessage.ClientID+”).offset().top;“+”\n”+
警报($('html,body').scrollTop());“+”\n+
$('html,body')。动画({scrollTop:destination-20},500);“+”\n“+
"});" +
"";
RegisterClientScriptBlock(this.GetType(),“scrollToMessage”,脚本);
除了一件事,这一切都起作用了。我的按钮位于页面折叠下方,因此用户必须向下滚动才能单击它。一旦他点击它,“我的代码隐藏”会做一些业务工作,然后注册javascript以滚动页面“从它原来的位置到我的标签所在的位置”(这只比位置0低一点。但事实并非如此。我的javascript代码是在ASP.NET维护滚动位置之前执行的,因此,滚动动画从零到标签位置,而不是从按钮位置到标签位置

所以,可爱的意义就在窗外

那么我该如何解决这个问题呢?我猜ASP.NET的MaintainScrollPositionOnPostback javascript是在我的文档之后执行的。准备好了,我可以试着延迟它,理想的情况是在.NET滚动调整之后立即“排队”它。但我不知道该怎么做

有人有类似的问题吗?有什么提示吗

//####开始解决方案###


只需手动调用ASP.NET的WebForm_RestoreSrollPosition()。清除结果

String script = "<script type=\"text/javascript\">" + "\n" +
                    "$(document).ready(function() {" + "\n" +
                        "if (typeof(WebForm_RestoreScrollPosition) == 'function') {" + "\n" +
                            "WebForm_RestoreScrollPosition();" + "\n" +
                        "}" + "\n" +
                        "var destination = $('#" + lblMessage.ClientID + "').offset().top;" + "\n" +
                        "$('html, body').animate({ scrollTop: destination-20}, 500 );" + "\n" +
                    "});" +
                "</script>";
ClientScript.RegisterClientScriptBlock(this.GetType(), "scrollToMessage", script);
String script = "<script type=\"text/javascript\">" + "\n" +
                "$(document).ready(function() {" + "\n" +
                    "if (typeof(WebForm_RestoreScrollPosition) == 'function') {" + "\n" +
                        "WebForm_RestoreScrollPosition();" + "\n" +
                    "}" + "\n" +
                    "var destination = $('#" + lblMessage.ClientID + "').offset().top;" + "\n" +
                    "$('html, body').animate({ scrollTop: destination-20}, 500 );" + "\n" +
                "});" +
            "</script>";
ClientScript.RegisterClientScriptBlock(this.GetType(), "scrollToMessage", script);
字符串脚本=”“+”\n+
$(文档).ready(函数(){“+”\n+
“如果(typeof(WebForm_RestoreScrollPosition)=='function'){”+“\n”+
“WebForm_RestoreSrollPosition();”+“\n”+
“}”+“\n”+
“var destination=$('#“+lblMessage.ClientID+”).offset().top;“+”\n”+
$('html,body')。动画({scrollTop:destination-20},500);“+”\n+
"});" +
"";
RegisterClientScriptBlock(this.GetType(),“scrollToMessage”,脚本);
//####结束解决方案###


谢谢!

在页面中设置
MaintainScrollPositionOnPostback=“false”
在页面指令以禁用回发时的默认页面滚动。然后您的代码应该按照逻辑滚动页面。

只需手动调用ASP.NET的WebForm\u RestoreSrollPosition()。清除结果

String script = "<script type=\"text/javascript\">" + "\n" +
                    "$(document).ready(function() {" + "\n" +
                        "if (typeof(WebForm_RestoreScrollPosition) == 'function') {" + "\n" +
                            "WebForm_RestoreScrollPosition();" + "\n" +
                        "}" + "\n" +
                        "var destination = $('#" + lblMessage.ClientID + "').offset().top;" + "\n" +
                        "$('html, body').animate({ scrollTop: destination-20}, 500 );" + "\n" +
                    "});" +
                "</script>";
ClientScript.RegisterClientScriptBlock(this.GetType(), "scrollToMessage", script);
String script = "<script type=\"text/javascript\">" + "\n" +
                "$(document).ready(function() {" + "\n" +
                    "if (typeof(WebForm_RestoreScrollPosition) == 'function') {" + "\n" +
                        "WebForm_RestoreScrollPosition();" + "\n" +
                    "}" + "\n" +
                    "var destination = $('#" + lblMessage.ClientID + "').offset().top;" + "\n" +
                    "$('html, body').animate({ scrollTop: destination-20}, 500 );" + "\n" +
                "});" +
            "</script>";
ClientScript.RegisterClientScriptBlock(this.GetType(), "scrollToMessage", script);
字符串脚本=”“+”\n+
$(文档).ready(函数(){“+”\n+
“如果(typeof(WebForm_RestoreScrollPosition)=='function'){”+“\n”+
“WebForm_RestoreSrollPosition();”+“\n”+
“}”+“\n”+
“var destination=$('#“+lblMessage.ClientID+”).offset().top;“+”\n”+
$('html,body')。动画({scrollTop:destination-20},500);“+”\n+
"});" +
"";
RegisterClientScriptBlock(this.GetType(),“scrollToMessage”,脚本);

好吧……我找到了一个很好的解决方法。我在制作动画之前调用WebForm_RestoreSrollPosition();(如果它是函数)。然后一切都会好起来。我将为问题添加代码,并在7小时内回答它。