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; }
}