Option Strict On
Imports System.Data.OracleClient
Public Class WebForm1
    Inherits System.Web.UI.Page
    public m_strId as string
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        '在此处放置初始化页的用户代码 If Not Page.IsPostBack Then m_strId = "123"
    End Sub
    Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click    End Sub
End Class问题:
    当我按了按钮btnAdd后,,又执行了PAGE_LOAD事件,并且这时m_strId变量
    值没有了,变成NOTHING了?    问题1:为什么我按了按钮后,又执行PAGE_LAOD事件呢?
    问题2:为什么PAGE_LOAD事件又执行后,m_strId值没有了呢?

解决方案 »

  1.   

    PAGE_LAOD事件是先执行的
    点按钮提交,页面回送,先PAGE_LAOD,然后才是btnAdd
      

  2.   

    1)page load事件会被多次调用的,只要你打开该页面或者进行了服务器端事件处理等都会导致该页面被加载。之所以如此,请你牢记:服务器并不持久保存每个页面对象的,而只在有访问发生时创建该对象的实例,根据viewstate等信息初始化并加载该页面,随后进行回调事件或其它事件处理。2)你现在的代码逻辑是说在page load时,如果不是IsPostBack(事件回调时IsPostBack==true)则把m_strId 设置成 "123"。因为按了btnAdd之后IsPostBack==true,该设置代码根本不会调用,所以m_strId 保持本次访问创建的page对象的默认状态(如果你没设置,就是null)。看起来,你是希望在回调过程中保持m_strId状态的,那你应该使用viewstate.
      

  3.   

    问题1:为什么我按了按钮后,又执行PAGE_LAOD事件呢?
    因为发生了PostBack
    问题2:为什么PAGE_LOAD事件又执行后,m_strId值没有了呢?
    你在写.net如果需要保存某个值可以放到ViewState里而不是全局变量。
    由于IsPostBack = ture所以没有执行m_strId = "123"
    所以当然是Nothing
      

  4.   

    public string StrId
    {
          get { return this.ViewState["StringId"] as string; }    
          set { this.ViewState["StringId"] = value; }
    }
    增加这样一个公开属性,并且把原代码中的m_strId替换成StrId就可以,试试吧。
      

  5.   

    to aafshzj() ( )怎么用VIEWSTATE啊,,,我是一个初习者