我有一个带有MultiView控件的页面,有些视图足够长,可以滚动。由于评论中的控件可能需要回发才能正常运行,因此在页面上启用了MaintainScrollPositionOnPostBack。
当用户从一个视图转换到另一个视图时,我遇到了问题。如果它们位于长视图的底部,并转换到另一个长视图,则新视图会加载并一直滚动到底部。当用户进入MultiView中的新视图时,我需要跳到页面顶部。
我尝试过使用OnActiveViewChanged事件: - 调用RegisterStartupScript将window.location.hash设置为我放置在页面顶部的锚点。 - 调用RegisterStartupScript来调用window.scrollTo(0,0) - 暂时将MaintainScrollPositionOnPostBack设置为false
问题是这些似乎都不会影响实际的转换回发,它们会对 next 回发生效,这实际上会导致更大的问题。
任何人都有一个经过验证的方法,只有在转换到新视图的回发中才能让MultiView页面跳转到页面顶部?
答案 0 :(得分:4)
这与我今天在多视图中遇到的问题完全相同..我找到了你的问题,并寻找答案。好像我们找到了同样的文章!
(C#中的文章代码)
private void ResetScrollPosition()
{
if (!ClientScript.IsClientScriptBlockRegistered(this.GetType(), "CreateResetScrollPosition"))
{
System.Text.StringBuilder script = new System.Text.StringBuilder();
script.Append("function ResetScrollPosition() {");
script.Append(" var scrollX = document.getElementById(\'__SCROLLPOSITIONX\');");
script.Append(" var scrollY = document.getElementById(\'__SCROLLPOSITIONY\');");
script.Append(" if (scrollX && scrollY) {");
script.Append(" scrollX.value = 0;");
script.Append(" scrollY.value = 0;");
script.Append(" }");
script.Append("}");
//Create the ResetScrollPosition() function
ClientScript.RegisterClientScriptBlock(this.GetType(), "CreateResetScrollPosition",
script.ToString(), true);
//Add the call to the ResetScrollPosition() function
ClientScript.RegisterStartupScript(this.GetType(), "CallResetScrollPosition", "ResetScrollPosition();", true);
}
}
答案 1 :(得分:1)
最后找到答案/解决方法:4Guys
你必须通过操纵用于跟踪滚动位置的隐藏字段来欺骗ASP.Net为你做这件事。