在ASP.NET页面之间传递数据

5

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


1
上下文项不起作用,因为它在请求之间被丢弃了。 - tloflin
我认为如果使用Server.Transfer(),context.items会被持久化?这些值只是从一个页面传递到另一个页面,还是在用户的生命周期中持久存在?用户需要拦截并更改这些值吗? - bryanjonker
这将在结账过程中进行,因此它们应该在用户生命周期内持久化。用户在第一次输入后不会更改这些值。这些值可能是账单地址、名字和姓氏等。 - user204588
“Multiple”指的是什么?这是按顺序进行:page1-> page2;还是page1应该同时向page2和page3提交数据? - Oleks
多个意味着不止一个 :) 我的意思是它们从一个页面开始,然后被引导到另一个页面完成交易。 - user204588
将这些东西扔进数据库,或者只是进行JavaScript页面更改。使用选项卡而不是实际更改到许多不同的页面。最后,当用户完成并单击提交时,请保存所有变量。 - SpoiledTechie.com
4个回答

4

会话(Session)可能是最有效率的方式。但是,如果会话超时或由于任何其他原因而丢失,则所有条目都将丢失。因此,如果持久性更重要,则可能需要在数据库中存储它。


3

也许可以使用跨页提交选项?

另一个选择是Server.Transfer方法,结合Context.ItemsForm属性。

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

但在您真正转移到另一页之前,浏览器中的URL不会更改。

需要注意的一件事是,如果第一个页面向响应缓冲区写入了某些内容,并且您没有清除它,则第二个页面的任何输出将附加到第一个页面的输出中。这通常是看起来像一个页面返回了两个不同页面的奇怪行为的原因。此外,由于传输发生在服务器上,因此无法将请求转移到外部站点。

更多信息可在此处找到。


我刚刚编辑了问题。这些值必须通过多个页面传递。 - user204588

1
通过会话变量传递值并不是一个很好的方法。您可能会遇到用户点击后退按钮或刷新页面时,会话变量已被垃圾回收的情况。这也适用于任何缓存项。解决此问题的一种方法是当用户转到第二个页面时,将所有变量放入某个隐藏字段中,由键值对分隔。
如果可以将值放在公开场合,为什么不直接将它们放在URL中呢?
如果两者都不行,那么将它们放入数据库并为每个用户名提供一个Guid ID,这对我来说可能是最后的选择,因为您需要在每个请求上读取和写入数据库。

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

是的,这正是我所想的。实际上没有必要将信息保存到数据库中。这些变量用于XML请求,他们可能会在下一个请求中更改其账单信息,因此我认为使用会话是正确的方式。 - user204588

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接