【问题标题】:How to set scroll position in MVC 4 when new page is loaded加载新页面时如何在 MVC 4 中设置滚动位置
【发布时间】:2015-07-12 22:57:36
【问题描述】:

在我的 MVC 4 Webapp 中,其中一个视图是列出房屋对象,并且在每个对象的右侧,用户都可以更改语言。假设您在页面中间阅读一个对象并决定要更改语言。然后加载一个看起来完全相同的新页面,但现在使用另一种语言的文本。问题是新页面从头开始(当然因为它是一个新页面),我希望新加载的页面与前一个页面具有相同的滚动位置。

为了更好地了解您可以访问http://www.lomahovi.com 的网站,然后点击Accomodations。在那里,您将看到每个对象的链接,您可以在其中切换英语和俄语。

因此,如果客户正在查看一个英文对象,并决定他/她想要切换到俄语,我不希望页面从头开始,而是应该在相同的对象/位置上它是英文的,因此客户端不必向下滚动页面即可再次找到该对象。

感谢任何帮助。 谢谢,

彼得

【问题讨论】:

标签: javascript asp.net-mvc asp.net-mvc-4 scroll-position


【解决方案1】:

您可以将当前屏幕位置发回更改语言的控制器 - 类似这样--> Link

将结果存储到一个临时对象中(即 TempData ["scrollTo"])。

在您看来,检查 TempData["scrollTo"] 是否为空,如果不是,请导航到该位置(使用 jquery)

编辑:

类似这样的:

  1. 在视图上:(用你的语言点击绑定)

    var screenTopPosition = $(document).scrollTop();
    //--Send this var to your controller as url param or w/e you prefer
    
  2. 在控制器上

    TempData["scrollTo"] = position; //where position is the param you received from the view
    
  3. 再次在视图上:(使用 Razor)

    $(function(){
       @if (TempData["scrollTo"]!=null)
      {
        var screenTop = @TempData["scrollTo"];
        $('#content').css('top', screenTop); //replace #content with your main div
      }
    });
    

添加:

要使用 Html Helper 发送 java-script var,您需要这样的东西(视图):

<div style="height:1000px">
    test
</div>
<div style="height:1000px">
    <a id="link" href="#">
        Click me
    </a>
</div>

@section scripts{
<script>

    var link = '@Url.Action("ActionName", "ControllerName", new { screenPosition = 123 })'

    $(function () {
             $("#link").click(RedirectWithScreenPos);
    });


    function RedirectWithScreenPos() {
        var screenPos = $(document).scrollTop();
        link = link.replace('123', screenPos);
        window.location.href = link;

    }
</script>
}

【讨论】:

  • 好的,你的意思是我应该使用下面的 $(document).scrollTop() 并且我将得到的值将是滚动页面的顶部?
  • 我正在使用辅助方法 Html.ActionLink("Русский", "AccomodationsRu"),那么如何将 screenPosition var 绑定到我的 ActionLink()?是通过将 ActionLink 修改为类似于 @Html.ActionLink("Русский", "AccomodationsRu", new { pos = screenTopPosition }) 的东西,我实际上无法开始工作,还是您建议另一种解决方案?谢谢,
  • 谢谢,但这正是我所做的,我将变量放在 head 部分的函数中,然后使用 Html.Actionlink("Русский", "AccomodationsRu", new { pos = screenTopPosition }) 但它不起作用。我不得不承认我的 JavaScript 技能可能不是最好的,但我有几年的经验,我就是不明白我做错了什么。我不应该在这里使用事件处理程序吗?谢谢
  • 我已经添加了视图的外观(至少是重定向部分)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-11
  • 1970-01-01
  • 2014-01-29
  • 2012-06-06
  • 1970-01-01
  • 2016-11-29
  • 1970-01-01
相关资源
最近更新 更多