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所有,转载请注明出处!