读书人

ViewState怎样保存 自己定义的一个类的

发布时间: 2012-04-11 17:42:33 作者: rapoo

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

读书人网 >asp.net

热点推荐