当前位置:编程学习 > C#/ASP.NET >>

关于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, --------------------编程问答--------------------
引用 13 楼 zpyzm2008 的回复:
是通过第一页单击赋值的,然后在第二页再单击出来的值为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())这样试试  --------------------编程问答--------------------
引用 25 楼 zpyzm2008 的回复:
我是想实现 Session("zt1“) 页面级共享呀,在这一页时多少,在那一页应该是多少,照你(Session("zt1")= int.parse(Session("zt1"))+1;)这么写的话,这是共享值吗


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

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

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

除了session,还可以用cookie共享.
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,