1

在 UpdatePanel 中,我有很多复选框,我需要将其“ AutoPostback”设置为“ true”。

问题:

假设我在面板中有 100 个复选框,并且我正在勾选 #50 复选框,然后控件会自动转到页面顶部,我必须再次下来以勾选另一个复选框(比如 #60)。

这对用户来说真的很烦人,我被要求停止这种自动滚动,以便他们可以留在同一个地方并勾选另一个复选框。我怎样才能让我的网页每次都在顶部?

有没有办法禁用这种行为?我猜 UpdatePanel 可能是问题所在。如果是这样,我该如何禁用自动引用?

4

3 回答 3

1

停止使用 UpdatePanel,或将 UpdateMode 设置为Conditional

如果UpdateMode属性设置为Conditional,则 UpdatePanel 控件的内容会在以下情况之一为真时更新:

  • 当回发是由该 UpdatePanel 控件的触发器引起时
  • 当您显式调用 UpdatePanel 控件的 Update 方法时
  • 当 UpdatePanel 控件嵌套在另一个 UpdatePanel 控件中并且父面板被更新时
  • ChildrenAsTriggers属性设置为 true 并且 UpdatePanel 控件的任何子控件都会导致回发。嵌套 UpdatePanel 控件的子控件不会导致对外部 UpdatePanel 控件的更新,除非它们被明确定义为父面板的触发器。
于 2013-01-16T17:08:56.737 回答
0

在您的页面指令中添加以下内容

维护ScrollPositionOnPostback="true"

于 2015-01-15T10:26:04.700 回答
0

没有内置的方法可以做到这一点。您必须编写一些 Javascript 函数来完成此操作:

有一个隐藏字段让我们说“hfScrollvalue”(保存和重置滚动位置)

  • 编写一个JS方法“GetScrollPosition”,获取面板的滚动位置并保存在你的隐藏字段中

  • 编写一个JS方法“SetScrollPosition”从隐藏字段中获取滚动位置并设置回面板

  • 然后,您可以在请求结束时调用 SetScrollPosition 方法,为此添加一个处理程序

  • 请求结束后,更新面板再次设置滚动位置。因此,您可以在将值设置为面板滚动位置时稍作延迟。您可以通过使用 Javascript 的 setTimeout 方法来做到这一点。所以通过这个延迟,您保存的位置将在 ajax 处理完成后设置在面板上

    function GetScrollPosition() {
        document.getElementById('<%= hfScrollvalue.ClientID %>').value = document.getElementById('<%= Panel1.ClientID %>').scrollTop;
    

    }

    函数 SetScrollPosition() {

            document.getElementById('<%= Panel1.ClientID %>').scrollTop = document.getElementById('<%= hfScrollvalue.ClientID %>').value; 
        } 
    } 
    
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequest); 
    
    function EndRequest(sender, args) { 
    
        setTimeout('SetScrollPosition()', 60); 
    }
    

    如果您正在使用一个位于 UpdatePanel 内的 TextBox,它也与 Timer 相关联,那么您可以使用以下内容:

    Sys.Application.add_init(DownloadInit);
    
    function DownloadInit(sender) {
    
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequest);
    
    }
    
    function SetScrollPosition() {
    
        var textArea = document.getElementById('<%=TextBox1.ClientID%>');
    
        textArea.scrollTop = textArea.scrollHeight;
    
    }
    
    function EndRequest(sender, args) {
    
         SetScrollPosition();
    
    }
    
于 2013-01-16T17:09:14.027 回答