日期:2014-05-18  浏览次数:20459 次

请问Asp.net 如何持久化后台变量
比如说WebForm1 .aspx.cs后台界面中定义一个string 变量test,我只希望它在页面第一次加载的时候初始化,其它时候PostBack都不初始化。而WebForm1.aspx中放一个DropDownList控件,当该控件选中项发生变化时触发事件来测试test的值,结果是test为空值。
C# code

 public partial class WebForm1 : System.Web.UI.Page
    {
        string test;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                DropDownList.Items.Add("test1");
                DropDownList.Items.Add("test2");
                test = "hello";
            }
        }
        protected void DropDownList_SelectedIndexChanged(object sender, EventArgs e)
        {
            Response.Write(test);//此时test为空值。。请问如何才能使得只初始化一次,而且又能让test持久化保存,如果我所需要持久化的变量不仅仅只是一个字符串变量,也可能是一个List<string>或者Dictionary类型,那么有哪些方法可以在服务器端只初始化一次,然后能够持久化保存呢?
        }
    }




------解决方案--------------------
在cs文件里面定义变量是不行的,当页面刷新后,这个变量的值就刷没了,除了session,cookie,viewstate的话,应该还能放到Cach里面,建议还是放到viewsdate里面吧。
------解决方案--------------------
C# code
 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            DropDownList1.Items.Add("test1");
            DropDownList1.Items.Add("test2");
            test = "hello";
            ViewState["value"] = test;
        }
    }

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (ViewState["value"] != null)
        {
            Response.Write(ViewState["value"].ToString());
        }
        else
        {
            Response.Write("null");
        }
    }