none
为什么全局变量,在page.IsPostBack时赋的值,不能全局化 RRS feed

  • 问题

  •     string strMain = "";
        string strSub = "";
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                strMain = "Merry Christmas";
            }
            strSub = "圣诞快乐";
            Response.Write("<script>javascript:alert('strMain中:" + strMain + "---------strSub外:"+strSub+"')</script>");
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            Response.Write("<script>javascript:alert('strMain中:" + strMain + "_________strSub外:" + strSub + "')</script>");
        }
    上面的全局变量strMain在Button1的单机事件中就没值了,而strSub在Page.IsPostBack外就有值,为什么呢?
    2009年12月25日 8:54

答案

  • 你好!

    回发了变量肯定要重新初始的。你可以使用 ViewState 或 Session 去保存它的状态,或使用 static 变量。

    public partial class WebForm1 : System.Web.UI.Page
    {
        public static string strMain;
        // 或使用 ViewState
        //public  string strMain;
        //{
        //    get { return ViewState["strMain"].ToString(); }
        //    set { ViewState["strMain"] = value; }
        //}

        string strSub = "";
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                strMain = "Merry Christmas";
            }
            strSub = "圣诞快乐";
            Response.Write("<script>javascript:alert('strMain中:" + strMain + "---------strSub外:" + strSub + "')</script>");
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            Response.Write("<script>javascript:alert('strMain中:" + strMain + "_________strSub外:" + strSub + "')</script>");
        }
    }

    知识改变命运,奋斗成就人生!
    2009年12月25日 9:18
    版主

全部回复

  • 你好!

    因为回发了变量重新初始了。你把  if (!Page.IsPostBack) 去掉就可以了。

    知识改变命运,奋斗成就人生!
    2009年12月25日 8:56
    版主
  • 可是(!Page.IsPostBack)不能去啊,我再看看,再请教您,谢谢啦,对了,圣诞快乐!
    2009年12月25日 9:12
  • 你好!

    回发了变量肯定要重新初始的。你可以使用 ViewState 或 Session 去保存它的状态,或使用 static 变量。

    public partial class WebForm1 : System.Web.UI.Page
    {
        public static string strMain;
        // 或使用 ViewState
        //public  string strMain;
        //{
        //    get { return ViewState["strMain"].ToString(); }
        //    set { ViewState["strMain"] = value; }
        //}

        string strSub = "";
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                strMain = "Merry Christmas";
            }
            strSub = "圣诞快乐";
            Response.Write("<script>javascript:alert('strMain中:" + strMain + "---------strSub外:" + strSub + "')</script>");
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            Response.Write("<script>javascript:alert('strMain中:" + strMain + "_________strSub外:" + strSub + "')</script>");
        }
    }

    知识改变命运,奋斗成就人生!
    2009年12月25日 9:18
    版主
  • 你好,第一次请求的时候,使用get获取一个Page对象,会执行到if(!Page.IsPostBack)中的语句,因为是get请求,所以IsPostBack为false。
    当你按下按钮后,第二次请求使用的是post请求,这时也产生新的Page对象,与第一次请求的Page对象没有联系。所以,可以看出strMain为“”。
    2009年12月25日 15:44
    版主