关于ASP.NET 开发中 全局共享变量的问题

zpyzm2008 2010-01-27 11:20:39
大家好,请求帮忙 是关于ASP.NET 开发中 全局共享变量的问题
我在 global.asax 文件中定义了以下变量:
Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
' 在新会话启动时运行的代码
Session("zt1") = "0"
End Sub
然后 我在 第一页 赋值
zj.sql = "select * from cp "
zj.qz()
Do While zj.rdr.Read
Session("zt1") = 1
Loop
然后再 第二页
MsgBox(Session("zt1"))

结果显示出来 还是0 不是1呀,请求为什么呀
...全文
304 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
newdigitime 2010-01-27
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zpyzm2008 的回复:]
是通过第一页单击赋值的,然后在第二页再单击出来的值为0,
[/Quote]

没听说过session能全局共享.

如果你的第二页不是通过点击第一页弹出来的,这两页之间的session就不是同一个对象.

你试试在第一页添加一个第二页的链接,通过点击这个链接打开第二页,这样应该能得到你需要的结果.

zpyzm2008 2010-01-27
  • 打赏
  • 举报
回复
是通过第一页单击赋值的,然后在第二页再单击出来的值为0,
newdigitime 2010-01-27
  • 打赏
  • 举报
回复
global.asax

Application("zt1")="0"


Do While zj.rdr.Read
Application("zt1") = 1
Loop

newdigitime 2010-01-27
  • 打赏
  • 举报
回复
你的第二页是重新打开的IE页,还是通过第一页点击出来的?

全局共享session???
zpyzm2008 2010-01-27
  • 打赏
  • 举报
回复
Dim i As Integer = 0
zj.sql = "select * from cp "
zj.qz()
Do While zj.rdr.Read
i = i + 1
Loop
MsgBox(i)
If i > 0 Then
Session("zt1") = 1
End If

显示出来有记录的,但是在第二页就是Session("zt1") 为0 ,请问如何解释呢
rdfpl 2010-01-27
  • 打赏
  • 举报
回复
SESSION数据丢失

http://hi.baidu.com/bodyhome/blog/item/53071960490b7043ebf8f800.html
AngleBabyHong 2010-01-27
  • 打赏
  • 举报
回复
upppppp
zpyzm2008 2010-01-27
  • 打赏
  • 举报
回复
是否跟框架有关系呀
zpyzm2008 2010-01-27
  • 打赏
  • 举报
回复
数据库当然有记录呀,数据库程序时对的,绝对没错的
hebeijg 2010-01-27
  • 打赏
  • 举报
回复
你要看看你那个do while 里最后一个是什么
也就是最后一次赋值时是什么
teita731 2010-01-27
  • 打赏
  • 举报
回复
有点像ASP的思路和写法。。。

首先确定zj.rdr里有记录么?或者第一页执行了么?
zpyzm2008 2010-01-27
  • 打赏
  • 举报
回复
然而在数据库里执行赋值的话,那第二页还是为0
zpyzm2008 2010-01-27
  • 打赏
  • 举报
回复
如果在第一页赋值 Session("zt1") = 1 ,那么在第二页出来的是1
Jack2013tong 2010-01-27
  • 打赏
  • 举报
回复
首先确定第一页的代码在打开第二页有没有执行?
newdigitime 2010-01-27
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 zpyzm2008 的回复:]
我是想实现 Session("zt1“) 页面级共享呀,在这一页时多少,在那一页应该是多少,照你(Session("zt1")= int.parse(Session("zt1"))+1;)这么写的话,这是共享值吗
[/Quote]

如果你要全网站所有用户共享,那就application了.

如果只是本人(某个浏览者),直接使用session就行了.不必在global中设置.

你之所以两个页面取的session值不同,是因为你的B页不是通过A页链接打开的,而是人为开了两个独立的IE窗口(而一般情况下,用户都是通过A页点击打开B页,再通过B页打开C页,一环一环相扣的)

除了session,还可以用cookie共享.
champagne_bin 2010-01-27
  • 打赏
  • 举报
回复
MsgBox(Session["zt1"].ToString())这样试试
小鹏 2010-01-27
  • 打赏
  • 举报
回复
代码执行可以有问题!
zpyzm2008 2010-01-27
  • 打赏
  • 举报
回复
我测试过了 还 是0
zpyzm2008 2010-01-27
  • 打赏
  • 举报
回复
我是想实现 Session("zt1“) 页面级共享呀,在这一页时多少,在那一页应该是多少,照你(Session("zt1")= int.parse(Session("zt1"))+1;)这么写的话,这是共享值吗
zpyzm2008 2010-01-27
  • 打赏
  • 举报
回复
第一页

Partial Class Default3
Inherits System.Web.UI.Page
Public zj As dbcl.db.Class1 = New dbcl.db.Class1
Dim i As Integer = 0
Public dbConnectionString As String
Public dbConnection As Data.OleDb.OleDbConnection




Public command As Data.OleDb.OleDbCommand

Public rdr As Data.OleDb.OleDbDataReader
Public bh1 As Integer = 0

Public sql As String = ""
Public sql1 As String = ""

Public sjb As String = ""
Public bh As Integer = 112000000
Public qymc As String = ""
Public nd As String = ""
Public dataset As Data.DataSet
Public dap As System.Data.OleDb.OleDbDataAdapter
Public sl As Double = 0
Public zzfcl As Double = 0
Public yyfcl As Double = 0
Public sdfcl As Double = 0
'---------------------------------连接ACCESS数据库---------------
Public Sub conn()
Try
dbConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\Administrator\桌面\WebSite9\Bin\sjk.mdb;Persist Security Info=true"
dbConnection = New Data.OleDb.OleDbConnection(dbConnectionString)
Catch ex As Exception
End Try
End Sub

Public Sub qz()
conn()
dbConnection.Open()
Command = New Data.OleDb.OleDbCommand(sql, dbConnection)
rdr = command.ExecuteReader
End Sub



Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click

sql = "select * from cp"
qz()
Do While rdr.Read
i = i + 1
Loop

If i > 0 Then
Session("zt1") = 1
End If
MsgBox(Session("zt1"))


Response.Redirect("default6.aspx")

End Sub
End Class
第二页
Partial Class Default6
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Label1.Text = Session("zt1")
End Sub
End Class

global.asax 文件
<%@ Application Language="VB" %>

<script runat="server">

Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
' 在应用程序启动时运行的代码
End Sub

Sub Application_End(ByVal sender As Object, ByVal e As EventArgs)
' 在应用程序关闭时运行的代码
End Sub

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
' 在出现未处理的错误时运行的代码
End Sub

Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
' 在新会话启动时运行的代码

Session("yhm") = ""
Session("mm") = ""
Session("zt1") = 0


End Sub

Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
' 在会话结束时运行的代码。
' 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
' InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
' 或 SQLServer,则不会引发该事件。
End Sub


可 Session("zt1") 就是为0 ,哎 搞死我了


加载更多回复(9)

62,254

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧