【发布时间】:2014-04-15 04:31:45
【问题描述】:
我正在使用 ajax 调用控制器来呈现部分视图。每次我点击刷新按钮或后退按钮时,它都会返回到我的主页/索引,而不是正在显示的部分视图页面。有人知道解决办法吗?
【问题讨论】:
标签: javascript ajax asp.net-mvc razor
我正在使用 ajax 调用控制器来呈现部分视图。每次我点击刷新按钮或后退按钮时,它都会返回到我的主页/索引,而不是正在显示的部分视图页面。有人知道解决办法吗?
【问题讨论】:
标签: javascript ajax asp.net-mvc razor
有几种方法可以解决这个问题,一种是让您的局部视图向 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 的差异,看看是否适合您的需求。
【讨论】: