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(); }