第一章 .Net 控件开发(WebForm) 开发简单自定义控件(4) Style类以及WebControl类

 1、前面的章节我们的所开发的控件都是继承Control这个基类,但这个基类并不是唯一的,我们还有个重要的基类WebControl,后者继承了前者,后者使用名为Style的Asp.Net类实例为强类型属性提供支持。我们这章主要介绍Style类

2、我们首先对上章TestControl1类的Render方法进行修改,我们在设计时没用的CSS样式,我们先给表格增加个样式高度。由于TestControl1继承TestControl,我们就直接在TestControl类的Render方法进行修改,而不在TestControl1方法进行重写了。

        /// <summary>
        /// 将服务器控件内容发送到提供的 System.Web.UI.HtmlTextWriter 对象,此对象编写将在客户端呈现的内容
        /// </summary>
        /// <param name="writer">接收服务器控件内容的 System.Web.UI.HtmlTextWriter 对象</param>
        protected override void Render(HtmlTextWriter writer)
        {
            writer.AddStyleAttribute(HtmlTextWriterStyle.Height, "50px"); //第2章(4)节增加的一个样式属性
            writer.AddAttribute(HtmlTextWriterAttribute.Border, "1");
            writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding, "2");
            writer.AddAttribute(HtmlTextWriterAttribute.Cellspacing, "3");
            writer.RenderBeginTag(HtmlTextWriterTag.Table);
            writer.RenderBeginTag(HtmlTextWriterTag.Tr);
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            writer.Write(Name);
            writer.RenderEndTag();
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            writer.AddAttribute(HtmlTextWriterAttribute.Id, "Txt_Name");
            writer.AddAttribute(HtmlTextWriterAttribute.Type, "text");
            writer.AddAttribute(HtmlTextWriterAttribute.Name, "Txt_Name");
            writer.RenderBeginTag(HtmlTextWriterTag.Input);
            writer.RenderEndTag();
            writer.RenderEndTag();
            writer.RenderEndTag();
            writer.RenderBeginTag(HtmlTextWriterTag.Tr);
            writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2");
            writer.AddAttribute(HtmlTextWriterAttribute.Align, "center");
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            writer.AddAttribute(HtmlTextWriterAttribute.Id, "Txt_Show");
            writer.AddAttribute(HtmlTextWriterAttribute.Type, "submit");
            writer.AddAttribute(HtmlTextWriterAttribute.Value, ShowName);
            writer.AddAttribute(HtmlTextWriterAttribute.Name, "Txt_Show");
            writer.RenderBeginTag(HtmlTextWriterTag.Input);
            writer.RenderEndTag();
            writer.RenderEndTag();
            writer.RenderEndTag();
            writer.RenderEndTag();
            base.Render(writer);
        }

3、HtmlTextWriter.AddStyleAttribute的方法的第二个参数是个字符串,当然有时候两个参数都可以以字符串的形式。该字符串的值麻烦的是,它不是安全类型很容易出错,比如我们设置表格宽度时,有时候一小心,将样式设置成writer.AddStyleAttribute(HtmlTextWriterStyle.Height, "50p");少了个“x”也都有可能的。但我们不用担心Style类提供了解决的方法,比如BackColor的值就是要Color类型,这样我们就不容易出错了,即使出错VS也会有提示。可是Style并不支持所有的CSS属性,有些属性我们找不到,这时我们就要进行扩展,我们后面的章节会讲到。

4、我们先看下上章控件所生成的HTML源码,我们从图中可以看到包含3个模块,每个模块都有不同的HTML标记,这不是很好的设计方法,因为方法必须被具体地涉及用于实现单一的功能,比如方法完成的人物太多,每次修改已点代码,那么最终将会失败,原因是每件事都很复杂。比如开发人员要在最外层的HTML元素table增加了新的属性,开发人员只能重写Render方法,包括与新属性完全无关的部分,又比如要在最外层元素HTML元素table打开和关闭之间嵌套呢!这可以使用WebContol类了。

5、WebControl采用完全不同的方法,WebControl将呈现3个HTML块的任务委托给独立的方法,而不是像我们前面缩写的都写在Render方法里。WebControl类重写了Render方法,将3个3个HTML块的任务委托给独立的方法。

        protected internal override void Render(HtmlTextWriter writer)
        {             
            RenderBeginTag(writer);
            RenderContents(writer);
            RenderEndTag(writer);        
        }

代码下载地址:点击下载 

本博客内容有些来源于网络或书籍如果侵害到你的权益,请及时联系我(hch458458@vip.qq.com)
版权归nethch所有,转载请注明出处!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值