【问题标题】:ASP.net Razor Refresh on partial view returns to home pageASP.net Razor Refresh on 部分视图返回主页
【发布时间】:2014-04-15 04:31:45
【问题描述】:

我正在使用 ajax 调用控制器来呈现部分视图。每次我点击刷新按钮或后退按钮时,它都会返回到我的主页/索引,而不是正在显示的部分视图页面。有人知道解决办法吗?

【问题讨论】:

    标签: javascript ajax asp.net-mvc razor


    【解决方案1】:

    有几种方法可以解决这个问题,一种是让您的局部视图向 url 添加一个哈希或查询字符串,并在您的 JavaScript 或控制器中进行处理以了解如何获取哈希/查询字符串并加载正确的局部视图在页面重新加载。

    但是,如果您需要在重新加载之前跟踪他们在做什么,您可以使用在服务器端保存其位置的东西,或者在客户端缓存。有关缓存的提示,请查看 this 或 this。

    我发现两者都工作得很好,但是使用哈希或查询字符串会显示在 url 中,并不总是你想要的。

    编辑

    我不确定您在客户端使用的是什么框架(knockout.js、jQuery 等),但其中有很多让这些事情变得更容易,您可以在加载时创建一个简单的视图缓存,根据您需要的任何顺序将所需的视图添加到缓存中,并在需要时将其注入到 div 或其他东西中。

    这里的问题是,部分视图在某种程度上就像代码片段,服务器知道如何处理它们,客户端知道如何查看它们,但浏览器不会将它们视为浏览器的条目历史记录,所以你必须告诉浏览器如何确保你的数据以你想要的方式重新加载。

    您可以查看的另一个选项是将它们注入浏览器历史记录,但您仍然需要一种方法让服务器在加载时提供正确的部分。我在一个人为单页 Web 应用程序加载部分内容的实现中发现了这个 here,这似乎是一个不错的选择。但同样,您需要知道如何在重新加载时收集这些数据。 但是要回答这个评论,浏览器没有什么神奇的方法可以知道你用 ajax 调用了什么。如果您希望浏览器自动了解它,请尝试使用@Html.Partial(string partialViewName) or @Html.RenderPartial(string partialViewName) 参见MSDN on these。

    您还可以考虑在 viewdata、tempdata、viewbag 或会话数据中添加一些内容,查看 this article 的差异,看看是否适合您的需求。

    【讨论】:

    • 肯定有比这些更简单的方法。我想,既然我们达到了 mvc5 和 razor3/4,它们将有一个更简单的方法来集成局部视图的后向和前向。
    • 我建议查看 sammy.js read a simple intro/explaination here,因为它的优点之一是允许使用单页应用程序进行浏览器导航 - 但您再次在 url 中使用哈希。 - 但它比自己编写更容易。还要检查我的编辑以获取其他选项。
    • 我没有正确思考,你的方式比我最初想象的更合乎逻辑。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    相关资源
    最近更新 更多