关于ASP.NET 开发中 全局共享变量的问题
大家好,请求帮忙 是关于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呀,请求为什么呀 --------------------编程问答-------------------- 首先确定第一页的代码在打开第二页有没有执行? --------------------编程问答-------------------- 如果在第一页赋值 Session("zt1") = 1 ,那么在第二页出来的是1
--------------------编程问答-------------------- 然而在数据库里执行赋值的话,那第二页还是为0 --------------------编程问答-------------------- 有点像ASP的思路和写法。。。
首先确定zj.rdr里有记录么?或者第一页执行了么? --------------------编程问答-------------------- 你要看看你那个do while 里最后一个是什么
也就是最后一次赋值时是什么 --------------------编程问答-------------------- 数据库当然有记录呀,数据库程序时对的,绝对没错的 --------------------编程问答-------------------- 是否跟框架有关系呀 --------------------编程问答-------------------- upppppp --------------------编程问答-------------------- SESSION数据丢失
http://hi.baidu.com/bodyhome/blog/item/53071960490b7043ebf8f800.html --------------------编程问答-------------------- 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 ,请问如何解释呢 --------------------编程问答-------------------- 你的第二页是重新打开的IE页,还是通过第一页点击出来的?
全局共享session??? --------------------编程问答-------------------- global.asax
Application("zt1")="0"
Do While zj.rdr.Read
Application("zt1") = 1
Loop
--------------------编程问答-------------------- 是通过第一页单击赋值的,然后在第二页再单击出来的值为0, --------------------编程问答--------------------
没听说过session能全局共享.
如果你的第二页不是通过点击第一页弹出来的,这两页之间的session就不是同一个对象.
你试试在第一页添加一个第二页的链接,通过点击这个链接打开第二页,这样应该能得到你需要的结果.
--------------------编程问答-------------------- 那我如何才能定义 页面级变量呢,也就是说在 页面之间传输值呢 (除了在地址赋值外) --------------------编程问答-------------------- 我第一页
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
zj.sql = "select * from cp"
zj.qz()
Do While zj.rdr.Read
i = i + 1
Loop
If i > 0 Then
Session("zt1") = 1
End If
MsgBox(Session("zt1"))
Response.Redirect("default6.aspx")
End Sub
通过按钮 转入到 第二页
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Label1.Text = Session("zt1")
End Sub
lable1 依然显示为0
--------------------编程问答-------------------- 把
Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
' 在新会话启动时运行的代码
Session("zt1") = "0"
End Sub
去掉呢,还显示0吗 --------------------编程问答-------------------- 去掉后 ,显示为空白,什么都没有 --------------------编程问答-------------------- 关键性的问题不解决,满头脑地烦躁呀,哎, --------------------编程问答-------------------- 还是存在数据库吧.全局的网站一停就没有了! --------------------编程问答-------------------- 试了一下,貌似没什么问题:
Global.asax
void Session_Start(object sender, EventArgs e)
{
// 在新会话启动时运行的代码
Session["a"] = "0";
}
page1.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
Session["a"] = 1;
}
page1.aspx
<asp:Button ID="Button1" runat="server" PostBackUrl="~/page2.aspx" Text="Button" />
page2.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
Response.Write(Session["a"]);
}
输出为 1 --------------------编程问答-------------------- 这样试下肯定是没问题的,这个我也试过,但经过数据程序代码后,就有问题了 --------------------编程问答-------------------- Session("zt1") = "0" 每次都会是0,很正常. 试一下 Session("zt1")= int.parse(Session("zt1"))+1; --------------------编程问答-------------------- 第一页
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 ,哎 搞死我了
--------------------编程问答-------------------- 我是想实现 Session("zt1“) 页面级共享呀,在这一页时多少,在那一页应该是多少,照你(Session("zt1")= int.parse(Session("zt1"))+1;)这么写的话,这是共享值吗 --------------------编程问答-------------------- 我测试过了 还 是0 --------------------编程问答-------------------- 代码执行可以有问题! --------------------编程问答-------------------- MsgBox(Session["zt1"].ToString())这样试试 --------------------编程问答--------------------
如果你要全网站所有用户共享,那就application了.
如果只是本人(某个浏览者),直接使用session就行了.不必在global中设置.
你之所以两个页面取的session值不同,是因为你的B页不是通过A页链接打开的,而是人为开了两个独立的IE窗口(而一般情况下,用户都是通过A页点击打开B页,再通过B页打开C页,一环一环相扣的)
除了session,还可以用cookie共享.
补充:.NET技术 , ASP.NET