自定义WebControl中嵌套有.net自带的服务器控件,服务器控件的Viewstate丢失问题例如:
<MyWebControls:TabControl ID="TabControl1" runat="server">
    <Items>
      <TabPage>
         <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
      </TabPage>
    <Items>
</MyWebControls>
<asp:button runat="server" text="Button" />比如点击这个buttion,无法捕获到 TextBox1.Text 的值.查看源码后,发现其中的ViewState丢失了.不知道是否要在自定控件中加入什么元数据属性吗?
很急,马上结贴.

解决方案 »

  1.   

    你的控件从哪继承来的?应该不会出现这种情况,各个控件的ViewState由各个控件自己控制的.
      

  2.   

    楼主控件可以发给我吗?>
    e-mail:[email protected]
    QQ 42567628
    Thanks
      

  3.   

    你的 TabControl 中什么地方将 TabPage 的内容控件放入控件树的?把执行这个的主要代码帖出来。
      

  4.   

    //这里是TabControl写入html的方法了#######################3protected override void Render(HtmlTextWriter writer)
            {
                //注册 JS,CSS
                RegisterScript();            //写入menu
                writer.WriteLine("<div class=\"JustTab\">");
                writer.WriteLine("  <div class=\"tabMenu\">");
                foreach (JcTabPage page in _Items)
                {
                    writer.WriteLine("      <div class=\"{1}\"><a href=\"javascript:\" onclick=\"J_ActiveTab(this)\">{0}</a></div>"
                        , page.Caption
                        , page.Selected ? "tabButtonActive" : "tabButton"
                        );
                }
                writer.WriteLine("  </div>");            //写入tabPage内容
                writer.WriteLine("  <div class=\"pageList\">");            //这里就是我写TabPage内容的地方了.
                foreach (JcTabPage page in _Items)
                {
                    page.RenderControl(writer);
                }
                writer.WriteLine("  </div>");            writer.WriteLine("</div>");
            }
    //JcTabPage里面写入内容的主要方法 ##########################
    protected override void Render(HtmlTextWriter writer)
            {
                if (this.Selected)
                {
                    writer.WriteLine("     <div class=\"tabPage\" style=\"display:block\">");
                }
                else
                {
                    writer.WriteLine("     <div class=\"tabPage\">");
                }
                this.RenderChildren(writer);
                writer.WriteLine("     </div>");
            }
      

  5.   

    昨天看了微软的table控件,也没见到有什么特殊的处理.
    我试了一下,如果不做集合属性,单纯的TabPage包含.net控件时,状态是可以保持的.