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

ximomomoxinei3 2012-04-07 02:52:35
DataDictionary我自己写的一个类..在webform中实例化

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实例内部携带的值。。。
...全文
179 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ximomomoxinei3 2012-04-08
  • 打赏
  • 举报
回复
感谢各位!!!
  • 打赏
  • 举报
回复
当然如果实在其它控件中,应该加上一个EnsureChildControl处理。
public string UserRealName
{
get{ EnsureChildControls(); return ViewState["urn"]; }
set{ EnsureChildControls(); ViewState["urn"] = value; }
}
  • 打赏
  • 举报
回复
这种“封装”有些太过了。

面向应用,只需要做这类封装:
public string UserRealName
{
get{ return ViewState["urn"]; }
set{ ViewState["urn"] = value; }
}
gudujianxiao 2012-04-07
  • 打赏
  • 举报
回复

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();
}
}
xboxeer 2012-04-07
  • 打赏
  • 举报
回复
你的这个DataDictionary貌似不包含自身的状态字段 个人感觉对于所有用户都用的是一样的吧?如果是的话就干脆当做静态字段好了
zh6335901 2012-04-07
  • 打赏
  • 举报
回复
那个自定义的类需要可序列化,才能持久化到ViewState中。可以为那个自定义类添加[Serizliable](大概是这么写的。。)特性
ximomomoxinei3 2012-04-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

你完全可以放到一个公共类里吗,这点跟winform一样
[/Quote]
1L那个方法应该就算个公共类吧(难道你指的是静态类?),我只是想在界面中只在load中加载一次,其它button都能取到值, 不然的话 每个butoon事件中都要多加一句 dd.GetUserRealName();,感觉很麻烦。同时也想借此机会学习一下ViewState用法,PS:ViewState可以保存类的实例吧?
bdmh 2012-04-07
  • 打赏
  • 举报
回复
你完全可以放到一个公共类里吗,这点跟winform一样
ximomomoxinei3 2012-04-07
  • 打赏
  • 举报
回复
DataDictionary类如下,用到了SortedList字典

public class DataDictionary
{
ProjectBLL gbll = new ProjectBLL();
public SortedList<int, string> dicProject;
public void GetProjectName()
{
//得到所有医院数据
List<ProjectModel> semList = gbll.GetAllProjectInfo();

//添加字典
dicProject = new SortedList<int, string>();
for (int i = 0; i < semList.Count; i++)
{
dicProject.Add(Convert.ToInt32(semList[i].ProjectID), semList[i].ProjectName);
}
}
}

62,267

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧