How do I maintain scroll position in MVC?

后端 未结 12 1927
情歌与酒
情歌与酒 2020-11-27 18:02

Im working on a project in MVC and have enjoyed learning about it. There are a few growing pains but once you figure them out it\'s not bad. One thing that is really simpl

12条回答
  •  粉色の甜心
    2020-11-27 18:48

    The way MaintainScrollPositionOnPostback works is that it has a pair of hidden fields: __SCROLLPOSITIONX and __SCROLLPOSITIONY

    On a postback, it sets these,

    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;
        }
    

    and then it calls 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;
    }
    

    But as most people said, MVC should be avoiding postbacks anyway.

提交回复
热议问题