protected override void Render(HtmlTextWriter writer)
        {
            //tb是自定义控件中的一个TextBox
            //lb是自定义控件中的一个Label
            //rev是一个验证控件
              Table table=new Table();
            table.CellPadding = 0;
            table.CellSpacing = 0;
            table.BorderWidth = 0;
            TableRow tableRow=new TableRow();
            TableCell tableCell1=new TableCell();
            tableCell1.Controls.Add(lb);
            tableRow.Controls.Add(tableCell1);            TableCell tableCell2 = new TableCell();
            tableCell2.Controls.Add(tb);
            tableRow.Controls.Add(tableCell2);            TableCell tableCell3 = new TableCell();
            tableCell2.Controls.Add(rev);
            tableRow.Controls.Add(tableCell3);            table.Rows.Add(tableRow);
            table.RenderControl(writer);        }我在一个自定义控件中重写了Render方法,导致出现以下错误
1.页面运行的时候会自动显示验证的errorMsg.
 2.页面提交后,不会保存TextBox的值.
这是为什么呢.?

解决方案 »

  1.   

    保存状态需要重写SaveViewState和LoadViewState方法
      

  2.   

    你尝试把每一个控件单独去RenderControl(writer);
    然后用RenderBeginTag去绘制表格.
    你这个例子 夜战鹰的树上有说..
    于一些比较有重要意义的子空间,都要调用控件自身的RenderControl方法,把控件输出到writer,确保逻辑正确
    估计是你一次过write Table出来之后,导致里面的控件逻辑错误。protected override void Render(HtmlTextWriter writer)
            {
                //tb是自定义控件中的一个TextBox
                //lb是自定义控件中的一个Label
                //rev是一个验证控件
                writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding, "0");
                writer.AddAttribute(HtmlTextWriterAttribute.Cellspacing, "0");
                writer.AddAttribute(HtmlTextWriterAttribute.Border, "0");
                writer.RenderBeginTag(HtmlTextWriterTag.Table);
                writer.RenderBeginTag(HtmlTextWriterTag.Tr);
                writer.RenderBeginTag(HtmlTextWriterTag.Td);
                this.lb.RenderControl(writer);
                writer.RenderEndTag();            writer.RenderBeginTag(HtmlTextWriterTag.Td);
                this.tb.RenderControl(writer);
                writer.RenderEndTag();            if(!string.IsNullOrEmpty(this.ValidateExpression)&&!this.DesignMode)
                {
                    writer.RenderBeginTag(HtmlTextWriterTag.Td);
                    this.rev.RenderControl(writer);
                    writer.RenderEndTag();
                }
                writer.RenderEndTag();
                writer.RenderEndTag();
            }
      

  3.   

    难道我每次重写Render的时候都要再次重写ViewState 相关的代码吗.?这样开发成本会不会太高,我觉得是加载的顺序出了问题
      

  4.   

    copy过来..可以
    鹰是那本庖丁解牛的作者吗.?我刚搜了下..谢谢..结贴