因此,对于如何在多个页面之间传递数据的问题,似乎没有任何可靠的答案。在完成一些功课之后,这就是为什么(或者至少我收集到的内容):
到目前为止,看起来我将使用隐藏字段将keyid和唯一ID传递给下一页,然后从db中检索数据。你对这一切有什么看法?做任何一件事的最佳方法是什么?我很早就开发了这个应用程序,所以现在更改。
答案 0 :(得分:5)
如果要保持状态,请将其存储在数据库中,因为您不必担心过期。 Session
类似,但您必须担心Session
到期。在这两种情况下,将相似数据写入同一区域的并发调用可能会导致问题,需要加以考虑。
Session
很好。数据库为您提供了更多的可伸缩性,但代价是执行大量的数据库读/写操作,您必须考虑清理。
我个人会尝试使用以下决策树:
当然还有更多内容,但是这应该会给你一个基本的考虑因素,因为你刚刚开始。把事情简单化。如果简单的查询字符串就足够了,请不要尝试过度设计解决方案。只要你保持简单的开始,你总是可以过度工程。
答案 1 :(得分:3)
我认为上下文在这里很重要,例如你想在页面之间传递什么?为什么?
如果您正在处理复杂的多部分表单,那么您可以在单个页面中实现表单,只显示或隐藏相关元素。尽可能使用usercontrols和自定义控件以促进隔离和可重用性。这使得生活变得更加容易。
用户生成的任何东西几乎肯定会最终在数据库中结束 - 所以#5似乎并不相关。也就是说,您不必将数据“临时”存储在数据库中 - 需要在不属于您的应用程序的页面之间保留哪些数据。
其他任何东西似乎与会话相关,而不是那么多数据。
如果我知道你在具体处理什么,我可以添加一些想法。
哦 - “cookies有潜在的安全问题,需要时间” - 你将使用cookies,除非你不想识别回访者。任何潜在的安全问题都只是执行不良的结果,当然在隐藏字段中传递数据也不是更好。而且你真的不想编写一个围绕发布到自身以外的表单的页面设计的ASP.NET应用程序。这只是令人头疼的原因很多,我不能想到这样做的好处是基本应用程序设计的一部分。
答案 2 :(得分:1)
会话变量应该可以满足您的需求。
我会选择StateServer或SQLServer Session状态模式。使用模式InProc是最快的,但它有一些问题(包括推送新二进制文件时所有用户会话被删除,web.config更改等)。会话不稳定,但您可以通过多种方式控制波动性。会话需要cookie,除非它们被配置为无cookie(我强烈建议你远离),但我认为这是一个合理的要求。
此外,您可以创建一个struct或serializable类,您可以从中创建可以存储在会话变量中的对象。结构或类将允许您将所有数据保存在一个位置 - 您只需担心一个会话变量。
任何方法都有优点和缺点,所有这些都是关于找到最佳方法。我希望这会有所帮助。
答案 3 :(得分:0)
所有方法都有其优点和缺点。这完全取决于您正在进行的工作。
如果在合理范围内使用,会话变量可以很好地工作。流量较大的站点中的InProc会话可以快速耗尽您的资源,但您始终可以切换到基于SQL Server的会话,该会话可以为您完成大部分数据库工作。