最近在研究控件开发,刚开始学,遇到个问题,想请教下。
就是比如我已经继承了WebControl这个控件类了
然后想在重载Render函数时,直接输出服务端控件,要怎么做呢?
比如要添加些服务器按钮之类的,直接写想想也肯定不行,毕竟都没有序列化到前端肯定无效了。
看了下我们公司写的一个翻页控件里面是有如LinkButton(上一页)按钮的,但是是通过继承Panel类,然后声明这个按钮,添加到Panel实现的(我觉得这样只能做些简单布局的控件,稍微复杂点的不好排版了,也可能还有其他方法,我不是很了解)
希望大家给点意见!
------解决方案--------------------------------------------------------
通过HtmlTextWriter 类应输出的。
- C# code
/// <summary> /// 将此控件呈现给指定的输出参数。 /// </summary> /// <param name="writer"> 要写出到的 HTML 编写器 </param> protected override void RenderContents(HtmlTextWriter writer) { //base.RenderContents(writer); if (this.GridView == null) { if (this.DesignMode) { writer.Write("请选择关联 GridView 。"); } } else { writer.AddAttribute(HtmlTextWriterAttribute.Id, this.ClientID + "_Div"); writer.AddAttribute(HtmlTextWriterAttribute.Width, this.Width.ToString()); writer.AddAttribute(HtmlTextWriterAttribute.Height, this.Height.ToString()); writer.RenderBeginTag(HtmlTextWriterTag.Div); writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding, "0"); writer.AddAttribute(HtmlTextWriterAttribute.Cellspacing, "0"); writer.AddAttribute(HtmlTextWriterAttribute.Border, "0"); writer.AddAttribute(HtmlTextWriterAttribute.Height, this.Height.ToString()); if (this.HorizontalAlign != HorizontalAlign.NotSet) { writer.AddAttribute(HtmlTextWriterAttribute.Align, this.HorizontalAlign.ToString().ToLower()); } writer.RenderBeginTag(HtmlTextWriterTag.Table); writer.RenderBeginTag(HtmlTextWriterTag.Tr); writer.RenderBeginTag(HtmlTextWriterTag.Td); #region -> 首页、上一页、下一页、末页 bool showArrow = (this.DisplaySettings.ShowMode == eC2SoftGridViewNavigationShowMode.ShowArrow || this.DisplaySettings.ShowMode == eC2SoftGridViewNavigationShowMode.ShowAll); bool showText = (this.DisplaySettings.ShowMode == eC2SoftGridViewNavigationShowMode.ShowText || this.DisplaySettings.ShowMode == eC2SoftGridViewNavigationShowMode.ShowAll); if (this.RowCount <= this.PageSize || this.GridView.PageIndex == 0) //当显示第一页时,首页和上一页不可用 { writer.AddStyleAttribute(HtmlTextWriterStyle.Color, "#999999"); writer.RenderBeginTag(HtmlTextWriterTag.Span); if (showArrow) { writer.AddStyleAttribute(HtmlTextWriterStyle.FontFamily, "webdings"); writer.RenderBeginTag(HtmlTextWriterTag.Span);
------解决方案--------------------------------------------------------
- C# code
protected override void RenderContents(HtmlTextWriter writer){writer.Write(string.Format("<input type='button' value='{1}' id={0}/>",this.ClientID+"_btn",this.Text));}