【发布时间】:2010-02-04 19:10:07
【问题描述】:
假设您正在构建一些简单的东西,例如用于处理名为 Customer 的实体的数据输入/CRUD 表单。也许您通过 Session 状态传递 CustomerID。
我倾向于围绕以特定方式处理 Session 变量编写大量相当样板的管道代码。目标略有不同,但往往是这样的:
- 避免使用管道代码使页面的主要流程混乱
- 智能处理后退按钮
- 从 Session 中移除变量并尽快将其持久化到 ViewState
- 针对状态未通过或丢失的故障情况进行防御性编码
您有处理这种情况的最佳做法吗?你的堆栈中有没有每次都能完美处理这个问题的类?你只是直接调用 Session 变量吗?您是否使用加密的 QueryString 并在这种情况下完全避免使用 Session 变量以使后退按钮更好地工作?
最近我一直在使用带有会话变量的属性。这是我刚刚拼凑的一个简单示例,但请记住,此示例不会非常容忍返回按钮:
Private ReadOnly Property CustomerID() As Integer
Get
If Me.ViewState(Constants.CustomerID) Is Nothing Then
If Me.Session(Constants.CustomerID) Is Nothing Then
Throw New ApplicationException("CustomerID was not persisted.")
Else
Me.ViewState(Constants.CustomerID) = Me.Session(Constants.CustomerID)
Me.Session.Remove(Constants.CustomerID)
End If
End If
Return Me.ViewState(Constants.CustomerID)
End Get
End Property
那么,您的商店如何处理这个问题?谢谢!
【问题讨论】:
标签: c# asp.net vb.net webforms