当前位置: 代码迷 >> .NET组件控件 >> 怎么直接输出服务器端控件
  详细解决方案

怎么直接输出服务器端控件

热度:9546   发布时间:2013-02-25 00:00:00.0
如何直接输出服务器端控件
最近在研究控件开发,刚开始学,遇到个问题,想请教下。
就是比如我已经继承了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));}
  相关解决方案