Как я сохраняю позицию прокрутки в MVC?

Сообщение об ошибке полностью корректно. Я пробовал все трюки, и никто не работал. Проект (простой тест MVC Web App) перенесен из Windows 8.1 VS 2015 Community в новый тестовый ящик в Windows 10. Были применены все последние обновления VS 2015. Я даже не мог установить более новую версию пакета компиляторов.

Loop:
<LOOP>This seems to be a Ground Hog Day phenomena.</LOOP>
GoTo Loop

Я, наконец, просто скопировал Microsoft.Net.Compilers.1.0.0 из старого проекта в новый, и он сработал. Затем я мог бы начать обновлять другие пакеты до более новой версии. Похоже на ошибку процесса обновления проекта nuget.

ПРИМЕЧАНИЕ. Исходный проект был создан в VS 2015 и не имеет никаких устаревших методологий nuget.

25
задан Papa Burgundy 29 January 2009 в 15:54
поделиться

5 ответов

Путем 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 должен избегать обратных передач так или иначе.

8
ответ дан Richard Gadsden 15 October 2019 в 15:29
поделиться

На самом деле нет никакого стандартного способа обработать это, это было взломом Microsoft для поддержки их сообщения назад модель. Им было нужно это, потому что каждое управление сделало сообщение назад, и пользователь будет постоянно пододвигаться обратно к верхней части страницы.

рекомендация для использования с MVC состоит в том, чтобы сделать большую часть Вашего сообщения назад к серверам с помощью Ajax. Так, чтобы страница не повторно представляла, фокус не перемещен. jQuery делает Ajax действительно легким, и существуют даже формы по умолчанию как

<% Ajax.BeginForm(...) %>

, Который будет заботиться о стороне Ajax вещей для Вас.

6
ответ дан Nick Berardi 15 October 2019 в 15:29
поделиться

Мое собственное обходное решение использует некоторую информацию в ViewData для знания то, какую область нужно показать в backnavigation и небольшом JavaScript для расположения курсора страницы:

В Представлении, элементе как это:

<h3 id="tasks">
    Contained tasks
</h3>

И JavaScript к repositionate страница:

<script type="text/javascript">
    addOnLoad(goAnchor);

    function goAnchor() {
        var paging = <%= //Here you determine (from the ViewData or whatever) if you have to position the element %>;
        if (paging == "True") {
            window.location.hash = "tasks";
        }
</script>

Вы могли использовать switch для определения, какой элемент от страницы представления необходимо переместить.

Hope это помогает.

3
ответ дан mapache 15 October 2019 в 15:29
поделиться

очень не - хороший способ сделать это использует cookie.

, Если Вы используете одну страницу в своем MVC, который обрабатывает другие страницы, Вы могли фрагмент кода к нему, который загружает каждую страницу, которая создает cookie (если не существующий) названный "scrolltop". Существуют способы иметь JavaScript, автоматически обновляют этот cookie, когда пользователь прокручивает или вниз путем ловли этих событий или наблюдения значения scrollTop.

На новой странице просто необходимо загрузить сохраненное положение и сделать прокрутку представления там в 0 миллисекундах (с Mootools, или любой Ajax пишут сценарий, это должно быть возможно), и пользователь будет точно, где они были.

я не знаю много о asp, таким образом, я не знаю, существует ли метод к привязке к текущему y-position. JavaScript является быстрым и простым способом. Привязки в HTML могли быть опцией, если бы Вам привязали каждый элемент и отправили привязку на другие страницы.

0
ответ дан xaddict 15 October 2019 в 15:29
поделиться
<%
   if(!ViewData.ModelState.IsValid)
   {
%>
   window.location.hash = 'Error';
<%
   }
%>

 <a name="Error"></a>
2
ответ дан 28 November 2019 в 18:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: