首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

Render事件中引发的逻辑异常

2012-04-17 
Render事件中引发的逻辑错误C# code protected override void Render(HtmlTextWriter writer){//tb是自定

Render事件中引发的逻辑错误

C# code
 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的值.
这是为什么呢.?

[解决办法]
保存状态需要重写SaveViewState和LoadViewState方法
[解决办法]
你尝试把每一个控件单独去RenderControl(writer);
然后用RenderBeginTag去绘制表格.
你这个例子 夜战鹰的树上有说..
于一些比较有重要意义的子空间,都要调用控件自身的RenderControl方法,把控件输出到writer,确保逻辑正确
估计是你一次过write Table出来之后,导致里面的控件逻辑错误。
C# code
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();        } 

热点排行