如何使用ASP.NET MVC 3将“昂贵”的数据从页面传递到页面?

时间:2012-05-02 20:24:18

标签: c# asp.net asp.net-mvc asp.net-mvc-3 razor

我正在做我的第一个ASP.NET MVC项目。 (事实上​​,为了记录,这是我的第一个生产网站。)

这是一个针对HTML 5的移动网页。

此页面会查找一些“昂贵”的信息。首先,它使用html 5地理编码功能从客户的浏览器中获取latlong。

我将该信息传递给控制器​​。该控制器使用Google Maps API填写城市和州(进入位置模型),然后在视图中使用它。

所以这个数据在两个方面都很昂贵,首先需要时间来查找,其次,在谷歌API的情况下,它实际上并不是免费的,因为谷歌限制了每天可以拨打的电话数量

据我所知,MVC旨在“拥抱”网络,包括http是无状态协议的事实。

尽管如此,我还是希望避免在每个需要它的端点的每个页面加载上获取这些昂贵的数据。此外,我想跟踪的另一个状态是数据已被提取。

在MVC 3 Web应用程序上实现此目的的最佳方法/最佳实践是什么?由于我的位置模型有4个数据点(lat long city state),并且有第五个数据点(检索到数据),我真的想避免使用查询字符串来执行此操作或所有这些数据点的路由?

我确信这是一个共同的需要,但老实说我不知道​​如何解决它。任何帮助将不胜感激。

赛斯

6 个答案:

答案 0 :(得分:3)

在我看来,您希望将API调用缓存到Google。

http://msdn.microsoft.com/en-us/library/18c1wd61(v=vs.71).aspx

您可以将从google获得的对象存储在缓存中,并在新的控制器事件中调用它。您还可以创建另一个具有google对象的对象和一个bool,指示您是否已获取数据。

在我看来,Cache是​​你最好的选择。

答案 1 :(得分:2)

如果在您的情况下可用,则可以将其存储在会话状态中,而不是在页面之间传递。

答案 2 :(得分:2)

由于这是“昂贵的”数据,但仍然不能持续很长时间,您可以:

  • 使用会话
  • 将数据放入缓存
    • 设置 Cookie 以启用从缓存
    • 中检索“昂贵”数据
    • 使用每个查询唯一的缓存键(lat long city state?)
  • 将数据(“检索到的数据”)存储在客户端上(因为您似乎没有在服务器端保留它)

我个人的偏好是使用唯一密钥的服务器端缓存。

答案 3 :(得分:1)

将昂贵的数据存储到缓存中,并根据您发送给Google的参数构建缓存ID,缓存ID对于每个不同的位置都应该是唯一的

答案 4 :(得分:0)

Session[xxx]=xxx;

Application[xxx]=xxx;

代替

答案 5 :(得分:0)

另一种选择是html5 storage。您需要检查目标浏览器是否支持它。这种方法的优点是服务器没有在会话或数据库中跟踪这些数据 - 实际上服务器根本不知道客户端存储。