假设您正在构建一些简单的东西,例如用于处理名为客户的实体的数据输入/CRUD表单。也许您通过会话状态传递customerid。
我倾向于编写大量关于以特定方式处理该会话变量的样板式管道代码。目标略有不同,但往往是:
-
避免将页面的主要流与管道代码混淆。
-
智能处理后退按钮
-
从会话中移除变量,并尽快将其保持为VIEWSTATE
-
为状态未通过或丢失的故障情况编写防御代码
你有处理这种情况的最佳实践吗?您的堆栈中是否有每次都能完美处理这个问题的类?您只是直接调用会话变量吗?在这种情况下,是否使用加密的querystring并完全避免会话变量,以使后退按钮工作得更好?
最近我一直在使用会话变量的属性。这里有一个简单的例子,我刚刚把它放在一起,尽管请记住,这个例子不能很好地容忍后退按钮:
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
那么,你的商店是如何处理这个问题的?谢谢!