我是使用VB语言编写的ASP.NET,由于是刚接触BS模式编程,也不是专业程序员,所以碰到了一点变量作用域的问题,特来向各位请教一下。下面是我的问题代码:Public Class test1
    Inherits System.Web.UI.Page    Dim test As String
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        '在此处放置初始化页的用户代码
        If Not Page.IsPostBack Then
            test = "13"
        End If
    End Sub    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        TextBox1.Text = test
    End Sub
End Class按照我自己的理解,在点击Button1按钮后,TextBox1里面就应该显示变量test的值“13”,可是结果却什么也没有显示。但我明明在Page_load里面对test变量进行了赋值的啊,这是为什么?

解决方案 »

  1.   

    Page.IsPostBack   是个时候是true
      

  2.   

    在第一次页面载入的时候,在执行
    If   Not   Page.IsPostBack   Then
        test   =   "13 "
    End   If 
    这里的代码。当点击按钮回传的时候,页面类重新生成。这时候不会去执行
    If   Not   Page.IsPostBack   Then  //这语句只在第一次载入的时候执行
        test   =   "13 "
    End   If 
    所以在按钮回传的进修,字段test没有被初始化。在按钮事件里,当然TextBox1的值就没有了
    楼主可以这样改:
    If   Not   Page.IsPostBack   Then
        test   =   "13 "
    End   If 
    ====>改成
    test = "13"; //这样每次页面载入的时候,都会在Page_Load处理事件里初始化
      

  3.   

    WEB页面是无状态的,在你点击按钮后,test重新声明,执行page_load事件,由于此时已经是PagePostBack,所以对test变量的赋值不会执行,解决办法是用隐藏文本域存储值或采用viewstate、session等存储
      

  4.   

    是刷新页面了
    因为按钮触发时要刷新页面
    把If   Not   Page.IsPostBack   Then
    这句去掉就可以了