另一种错误引起“未能加载视图状态”

如果你不是在做动态加载控件那么你需要注意是不是使用Page.Controls.Remove之类的

症状:

页面中作用到ItemDataBound事情,对那些不满足情况的控制不给予显示。于是我就产生这么一段代码:

e.Item.Controls.Remove(e.Item.FindControl("btnDelete"));

异常:

未能加载视图状态。正在向其中加载视图状态的控件树必须与前一请求期间用于保存视图状态的控件树相匹配。例如,当以动态方式添加控件时,在回发期间添加的控件必须与在初始请求期间添加的控件的类型和位置相匹配。

原因:

来自MSDN的一段介绍,“ViewState 为 ASP.NET 开发人员解决了一个特定问题 — 保留服务器端不形成元素的控件的状态。”,不然看出Remove移除数个控件后,当我下一次POST时不能在相同的控件,于是就产生该异常。

解决:

将控件隐藏而非移除。

(e.Item.FindControl("btnDelete") as LinkButton).Visible = false;

细节决定一切。这里还一篇讲述关于另外一些情况引起该异常的文章。

Microsoft Chart Controls for Microsoft .NET Framework 3.5

记得大学在开发基于B/S画流程图项目中,VML成了我的首先。尝试过VML能在浏览器上画出你想要的图像时甚至动画的成功后,我开始用VML画各种图表。

然而针对VML在各种浏览器支持问题并且在复用性等都难于满足我大范围使用它,我慢慢的向第三方开源靠近。Open Flash Chart也成为我心中的另一主流,非常酷界面、多种开发语言支持、有点可惜自身本不支持中文,当然你完成不必担心,毕竟是开原,已经有相关的解决中文问题方案。

.Net Chart是在.NET Framework 3.5下的图表控件,而且它完全免费。出于它是出身.NET自身,所以非常容易使用,也不存在中文问题。这里有一篇来自ScottGu’s的详细介绍

© 2017 卡片机色彩 沪ICP备13032872号-3

Theme by cipchk

to top