我有一个带有MultiView控件的页面,其中一些视图足够长,可以滚动。由于评审中的控件五月需要回发才能正常运行,因此在页面上启用了MaintainScrollPositionOnPostBack。
当用户从一个视图转换到另一个视图时,我遇到了问题。如果它们位于长期视图的底部,并转换为另一个长视图,则新视图将加载并一直滚动到底部。当用户进入MultiView中的新视图时,我需要跳到页面的顶部。
我尝试使用OnActiveViewChanged事件:-调用RegisterStartupScript将window.location.hash设置为我放置在页面顶部的锚点。-调用RegisterStartupScript调用window.scrollTo(0,0) -暂时将MaintainScrollPositionOnPostBack设置为false
问题是,这些都不影响实际的过渡回发,它们在下一次回发时生效,这实际上导致了一个更大的问题。
有谁有经过验证的方法让MultiView页面只在回发到新视图时跳转到页面的顶部?
发布于 2011-01-31 18:31:28
终于找到了答案/解决办法:4人
您必须通过操作用于跟踪滚动位置的隐藏字段来欺骗ASP.Net。
发布于 2011-01-31 19:33:24
这正是我今天在多视点上遇到的问题。我找到了你的问题然后去找答案。看来我们找到了同一篇文章!
(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);
}
}https://stackoverflow.com/questions/4839795
复制相似问题