2011-09-02 78 views

回答

1

通常的方法是使用一些JavaScript将当前滚动位置设置为隐藏字段,然后在页面加载时恢复该位置(通常在jQuery就绪事件中)。

但是,这只是一个副作用。你应该做一些ajax命令来更新网格而不是回发,然后不需要滚动。

+1

这个解决方案很好,但我想知道是否可以找到更好更容易的东西,比如ASP.NET Web窗体中的属性MaintainScrollPositionOnPostback = true。我使用的搜索过滤器和排序MVC Contrib网格,所以我期望内置的解决方案,但我找不到它... – Mast3r

+1

是的,我同意Mast3r。没有说我们“必须”使用Ajax。我发现在mvc 4中使用视图模型的回发速度要快得多,开发起来也更容易。如果启用浏览器缓存,您甚至不会看到页面轻弹!解决方案http://stackoverflow.com/a/2618726/706363 – ppumkin

0

使用jQuery和客户端cookie。

$(function(){ 
    var posName = location.href + "_top"; 
    $(window).unload(function() { 
    var top = $(document).scrollTop(); 
    $.cookie(posName, top); 
    }); 

    var goTop = parseInt($.cookie(posName)); 
    if (goTop) { 
    $(document).scrollTop(goTop); 
    $.cookie(posName, ""); 
    } 
}); 

希望这段代码。

+0

这意味着即使您移动到不同的页面,浏览器也会滚动。我认为最好使用隐藏的输入,因为它只会保留在当前页面上。 –

0

一个有用的解决方案张贴在这里:http://www.experts-exchange.com/Hardware/Servers/Q_28082177.html

$(function(){ 

     var top = parseInt($.cookie("top")); 
     if(top) $(document).scrollTop(top); 
     $(document).scroll(function() { 
      var top = $(document).scrollTop(); 
      $.cookie("top", top); 
     }) 
    }); 

这是一个非常古老的线程,但我已经发布本作开发谁将会寻找这种问题,可能会有帮助。