html – 如何在MVC中维护滚动位置?

我在MVC的一个项目工作,并喜欢学习。有一些成长的痛苦,但一旦你弄清楚它不坏。 WebForms世界中真正简单的一件事就是保持页面上的滚动位置。您所做的只有将MaintainScrollPositionOnPostback属性设置为true。但是,在MVC中,我没有使用回发,所以这对我来说是不行的。处理这个的标准方法是什么?

编辑:Ajax是可以接受的,但我也想知道如何在没有AJAX的情况下执行。

最佳答案
MaintainScrollPositionOnPostback的工作原理是它有一对隐藏的字段:
__SCROLLPOSITIONX和__SCROLLPOSITIONY

在回发之后,它设置了这些,

function WebForm_GetScrollY() {
if (__nonMSDOMBrowser) {
    return window.pageYOffset;
}
else {
    if (document.documentElement && document.documentElement.scrollTop) {
        return document.documentElement.scrollTop;
    }
    else if (document.body) {
        return document.body.scrollTop;
    }
}
return 0;
}
function WebForm_SaveScrollPositionSubmit() {
    if (__nonMSDOMBrowser) {
        theForm.elements['__SCROLLPOSITIONY'].value = window.pageYOffset;
        theForm.elements['__SCROLLPOSITIONX'].value = window.pageXOffset;
    }
    else {
        theForm.__SCROLLPOSITIONX.value = WebForm_GetScrollX();
        theForm.__SCROLLPOSITIONY.value = WebForm_GetScrollY();
    }
    if ((typeof(this.oldSubmit) != "undefined") && (this.oldSubmit != null)) {
        return this.oldSubmit();
    }
    return true;
    }

然后它调用RestoreScrollPosition:

function WebForm_RestoreScrollPosition() {
    if (__nonMSDOMBrowser) {
        window.scrollTo(theForm.elements['__SCROLLPOSITIONX'].value, theForm.elements['__SCROLLPOSITIONY'].value);
    }
    else {
        window.scrollTo(theForm.__SCROLLPOSITIONX.value, theForm.__SCROLLPOSITIONY.value);
    }
    if ((typeof(theForm.oldOnLoad) != "undefined") && (theForm.oldOnLoad != null)) {
        return theForm.oldOnLoad();
    }
    return true;
}

但是,正如大多数人所说,MVC应该避免回发。

转载注明原文:html – 如何在MVC中维护滚动位置? - 代码日志