解决方案 »

  1.   

    mytable 断点一下试试,看看有诶有值
      

  2.   


    你给当前 Page 对象的 mytable 属性赋值,假设 mytable 定义在页面(code behind隐藏代码)中的代码是protected Table mytable; 
    那么运行时,这个属性引用了当前 Page 的控件树上某个控件。现在你把这个属性变量另外赋值了(让此属性变量引用另外一个对象),你改变了当前 Page 的控件树了吗?没有。这当然不会对 Page 的 Render 产生任何影响。因为页面的 Render 过程是递归遍历自己的内部控件树来产生 html 的,而不是遍历自己声明的属性的。要让 Page 上的控件树改变,你必须把你的控件插入控件容器中。不过回到你的更大的问题上,在 Session 集合中是不可能保存控件并且再插入新的控件树的。就算是 Session 集合不会(经常)丢失,我们可以不考虑“Session丢失”问题,一个控件一旦插入一个控件树,下次再插入新的控件树时就会崩溃。控件不允许两次插入控件树!而且就算是把控件放入 Session 集合可以保持、也可以多次插入控件树,但是在 Session 集合中的东西不能参与 asp.net 页面生命周期的计算,不能自动化地响应客户端的 PostData、DataChangedEvent、PostbackEvent等行为,也丧失了asp.net基本功能。总之,把控件放入 Session 集合,是一个错误的。你还不如学习一下如何对 ascx 进行“局部缓存”,使用 OutputCache 让页面上的局部可以保持“缓存”而不真正去重建。这走的是另外一个真正合理的机制,而不是你这种“插入控件”机制。
      

  3.   

    asp.net的回发机制,在8年前也许还不错,在几天就变成了一个“错误选择”了。不论是asp.net webform还是asp.net mvc都是一样都是错误选择。ajax技术是单页面的、不回发的。而asp.net ajax的重量级控件 UpdatePanel 并没有做到轻量级的ajax。asp.net从来没有把自己的控件真正移植到ajax变成水平上,因此asp.net从2006年开始其实就开始过时了。今天有许许多多客户端 web ui 框架可以轻松地帮你实现各种 ajax 下的复杂插件,以及为插件方便地绑定数据。只不过许多 asp.net 程序员不懂这些,一直抱着“我喜欢写后台、不喜欢写前端”的借口而已。
      

  4.   

    谢谢 初学asp.net 感觉听了你说的 很能拓宽思路