2010-03-16 49 views
1

我有一个类includes.vb拥有一些变量(与其他网页分享它们),如:我的共享变量是否会失去价值? (asp.net VB)

Public Shared pageid As Integer = 0 

然后我有做这些变量返回他们工作的一些功能值;

Return pageid 

当我通过代码,这些变量的值(同时通过功能步进),但是当他们返回到该页面,他们回来空。

每次页面加载时它们是否值? 你能否提出一种替代方法?

非常感谢。

回答

2

您应该使用可能的会话变量。

Session("PageID") = 0 

并在您每次需要时访问它。

不是最好的做法,但如果你想要更严格,你可以为每个会话使用特定的应用程序变量,这样如果用户在一天之后返回到网站,它仍然不会丢失(只要你没有'我做了一个iisreset)。

要克服iisreset将会是一个更大的矫枉过正,您可以将值保存到文件/数据库并在每次需要时检索它。 (请不要那样做!)

这也许可以进一步解释: http://codeforeternity.com/blogs/technology/archive/2007/12/19/handling-asp-net-session-variables-efficiently.aspx

2

在Web项目中使用共享变量不是一个好主意:首先,每次执行“iisreset”或回收应用程序池时,都会重置这些变量。接下来,这些变量不是每个用户,而是每个进程和(我相信)都不能保证是线程安全的,因此一个线程可能会更改变量的值,然后另一个线程会将值重置为不同的值。

从变量名称“PageID”判断,我认为你试图追踪用户访问过的最后一页。如果是这种情况,那么会话变量作用域是一个更好的解决方案。请参阅教程:http://msdn.microsoft.com/en-us/library/ms178581.aspx

+0

什么替代方案可用?我怎样才能达到预期的效果? – Phil 2010-03-16 06:49:46

+0

PageID从querystring中获取id项并用它来标识需要向用户显示哪些页面。 – Phil 2010-03-16 07:18:01