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

解决方案 »

  1.   

    这个是控件添加完毕后你在客户端改变了控件的内部值,也就是控件的状态发生了改变,返回服务器端viewstate验证不通过出现的错误,你用的是vs2005吧!
    在page里加上enableviewstate试试
      

  2.   

    <%@ Page EnableViewState="false" .....%>不行的话我也不知道什么原因了
      

  3.   

    EnableViewState="false"不行.我用的是vs.net 2003
      

  4.   

    代码类似这样的:
    switch(QuesTypeIndex)
    {
    case "1":
    dxtControls=(Web.PaperAscx.ExamPaperDXT)LoadControl("../PaperAscx/ExamPaperDXT.ascx");
    dxtControls.ID="dxtControl";
    dxtControls.StuID=StuID;
    dxtControls.ExamID=int.Parse(ExamID);
    dxtControls.PaperType="0";
    this.PHPaper.Controls.Add(dxtControls);
    break;
    case "2":
      

  5.   

    第一次加载成功,当QuesTypeIndex的值发生变化,即需要加载其它控时时,Cache到错误.
    QuesTypeIndex的值,是根据Session值确定的.Session值的改变是能过js调用__DoPostBack('LinkButtonID','');改变的.
      

  6.   

    网上可以搜到很多相关的解决办法http://www.cnblogs.com/king_astar/archive/2005/05/31/52322.html
      

  7.   

    dxtControls.EnableViewState = false;
      

  8.   

    Q: 第一次加载成功,当QuesTypeIndex的值发生变化,即需要加载其它控时时,Cache到错误.
    QuesTypeIndex的值,是根据Session值确定的.Session值的改变是能过js调用__DoPostBack('LinkButtonID','');改变的.
    ——————————————————————————————————————————
    A: 你的LinkButtonID改变Session值的事件是在页面什么事件中处理的?那个this.PHPaper.Controls.Add(dxtControls);
    又是在什么事件中处理的?“是根据Session值确定的”很可以的逻辑?!按理说,修改Session值的同时应该重建PHPaper的子控件,怎么对反而多绕很多看不懂的弯弯?
      

  9.   

    很可以的逻辑  -->  很可疑的逻辑难道一个已经过了page_load事件阶段的东西,以硬要把它塞回page_load事件中去?