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

来源:互联网 发布:博远软件下载 编辑:程序博客网 时间:2024/06/05 12:35
 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所有,转载请注明出处!

原创粉丝点击