我正在开发一个 CRUD ASP.NET WebForms Web 应用程序,该应用程序由几个页面组成,用户可以在这些页面中填写数据。在用户单击最后一页上的“完成”之前(出于各种原因),我的客户不想在页面之间将实体存储在数据库中。有哪些选项可以在页面之间传播填充的数据,哪个选项最不坏?根据我的阅读,我已经看到可以使用 ViewState 和 Server.Transfer。任何其他选项,最好使用更少的魔法字符串和更多类型安全的数据绑定(bind)到实体对象?
最佳答案
使用 ViewState
将显着增加您发送的数据量,因为所有 Viewstate
数据都被序列化到表单中的隐藏输入中,因此您添加对象,您的 HTTP 请求-响应将显着增长。
这真的没有 Elixir 。如果您的数据不太复杂,我会将这些值存储在查询字符串中。如果您的对象变得越来越复杂和庞大,并且您想保持类型安全,我会使用 Session
,但请记住自己清理!
另一种选择是使用 MVC 范例并使用隐藏输入以其自身的形式存储值。这意味着如果用户中途退出,您无需担心清理您的 session ,但它还可以保持您的查询字符串干净。
认为这就是您所有的选择,查询字符串、 View 状态(不要这样做)、 session 或隐藏变量.
好的,所以你必须序列化你的数据,所以你不能持久化上下文。这是不可序列化的,所以以上是您的选择:
它们各有正反两面,
- Viewstate(低效但易于使用)
- 查询字符串(高效但不适合大数据集且可编辑)
- session (增加服务器负载并需要清理,但允许您仅将数据保存在服务器上)
- 隐藏变量(对用户隐藏但比 View 状态更有效需要每个属性的大量隐藏输入)
任你选!
关于c# - 如何在不使用 EntityFramework 保存到数据库的情况下在 ASP.NET 中跨实体请求保存状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13802404/