2010-04-14 132 views
4

我想知道什么是在多页面之间传递大量值的最佳方式。我正在考虑使用context.Items []或Session []将值保存到数据库。我不确定什么是最好的方法。我传递的可能是大约40个变量。这将在结帐过程中进行,因此应该在用户生命周期中持续保存。用户在第一次输入后不会更改这些值。价值将像帐单地址,名字和姓氏等在asp.net页面之间传递数据

+1

那么,context.Items将无法正常工作,因为它会在请求之间被丢弃。 – tloflin 2010-04-14 18:32:52

+0

如果使用Server.Transfer(),我认为context.items是持久的? 值是从一个页面转到另一个页面,还是通过用户的生命周期持续存在?用户是否需要拦截并更改这些值? – bryanjonker 2010-04-14 18:37:03

+0

这将在结帐过程中进行,以便在用户生命周期中保持它们。用户在第一次输入后不会更改这些值。这些值将类似于帐单地址,名字和姓氏等。 – user204588 2010-04-14 18:40:03

回答

4

会话可能是最有效的。但是,如果会话因任何其他原因超时或丢失,则任何条目都将丢失。所以如果持久性更重要,你可能想将它存储在数据库中。

3

也许Cross-Page Posting选项?

另一个选项可能是Server.Transfer方法连同Context.ItemsForm属性。

在这种情况下,任何发布的表单变量和查询字符串参数都可用于第二个/第三个/ etc。页面也是如此。

但是,浏览器中的URL将不会改变,直到你真的转移到另一个页面。

有一点要注意的是,如果 第一页写的东西给 响应缓冲区,而你没有明确 它,然后从第二 页的输出会被追加到输出第一个是 。这通常是 奇怪行为的原因,看起来 页面正在返回两个不同的页面。 此外,由于传输发生在 服务器上,因此您无法将 请求传输到外部站点。

可以找到更多的信息here

+0

我刚刚编辑了这个问题。值必须通过多页传递 – user204588 2010-04-14 18:33:44

1

通过会话变量传递值不起作用。用户点击后退按钮或单击刷新并且会话变量已被垃圾收集时,您可能也有机会。这是任何缓存项目的方式。解决这个问题的一个方法是,当用户进入第二页时,您将所有变量放入由Key:Value对分隔的某个隐藏字段中。

如果这些值可以放在公开的地方,为什么不把它们放到URL中呢?

如果你不能这样做,然后把它们放到数据库中,并给每个用户名指定一个Guid ID,这对我来说将是最后的选择,因为你必须在每个数据库上读写数据库请求。

1

答案完全取决于用户下一次返回到您的网站时的期望。他希望你记得他已经输入的联系信息吗?如果是这样,那么你将不得不在数据库,cookie等中使用长期持久性。你的用户是否只为这次访问输入其他人的信息(即客户服务应用程序),并且会在下次输入不同的信息他们参观?如果是这样,那么你可能想使用Session对象。

+0

是的,这就是我的想法。真的没有理由将信息保存到数据库。这些变量用于xml请求,他们可以在下一个请求中更改他们的账单信息,所以我认为会话是要走的路 – user204588 2010-04-14 20:04:51