当前位置: 代码迷 >> ASP.NET >> ViewState怎样保存 自己定义的一个类的实例?该怎么解决
  详细解决方案

ViewState怎样保存 自己定义的一个类的实例?该怎么解决

热度:7128   发布时间:2013-02-25 00:00:00.0
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;  }}
  相关解决方案