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

ViewState怎样保存 自己定义的一个类的实例?
DataDictionary我自己写的一个类..在webform中实例化 
C# code

 DataDictionary dd = new DataDictionary();

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                  DictionarySet();
                  dd.GetUserRealName();//这句是给dd赋值
                  //这句话可以取到sss的值哦!!!
                  string sss=  dd.dicProject[16].ToString();
            }
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            //很不幸 这句就会报错了 ,提示未将对象引用设置到对象的实例。
           //除非在这行代码前面也加一个dd.GetUserRealName();方法才能取到值         
             string sss=  stringTest.dicProject[16].ToString();
        }


因为之前做winfrom,已经习惯了保存公共变量在方法外部,然后再load方法中进行赋值操作,但是asp.net是无状态的,我该怎么改写这个变量(最好用ViewState来存),使得只在load中执行一次dd.GetUserRealName();后,该页面其它按钮同样也能取到dd实例内部携带的值。。。

------解决方案--------------------
你完全可以放到一个公共类里吗,这点跟winform一样
------解决方案--------------------
那个自定义的类需要可序列化,才能持久化到ViewState中。可以为那个自定义类添加[Serizliable](大概是这么写的。。)特性
------解决方案--------------------
你的这个DataDictionary貌似不包含自身的状态字段 个人感觉对于所有用户都用的是一样的吧?如果是的话就干脆当做静态字段好了
------解决方案--------------------

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataDictionary dd = new DataDictionary();
DictionarySet();
dd.GetUserRealName();//这句是给dd赋值
ViewState["dd"]=dd;
}
}

protected void Button1_Click(object sender, EventArgs e)
{

if(ViewState["dd"]!=null)
{
DataDictionary dd=(DataDictionary)ViewState["dd"];
string sss= dd.dicProject[16].ToString();
}
}

------解决方案--------------------
这种“封装”有些太过了。

面向应用,只需要做这类封装:
C# code
public string UserRealName
{
    get{  return ViewState["urn"];   }
    set{  ViewState["urn"] = value;  }
}