您的位置:首页 > 编程语言 > ASP

庖丁解牛ASP.NET3.5控件和组件开发技术-(3)从零开始开发服务器控件

2010-01-13 14:06 656 查看
第二章服务器控件开发中的调试技术略,因为在开发当作调试技术用的很多。

选择基类:Control具有最基本的属性,WebControl有外观布局和样式等属性,CompositeControl实现了INamingContainer接口,现有控件。

控件呈现顺序:

RenderControl

Render

RenderBeginTag

RenderContents

RenderEndTag

3. Render呈现控件的基本方式

方式一:
output.AddAttribute(HtmlTextWriterAttribute.Href, "http://www.cnblogs.com/");
output.AddAttribute(HtmlTextWriterAttribute.Target, "blank");
output.AddStyleAttribute(HtmlTextWriterStyle.Color, "Blue");
output.AddStyleAttribute(HtmlTextWriterStyle.Cursor, "Hand");
output.RenderBeginTag(HtmlTextWriterTag.A);
output.Write(this.Text1);
output.RenderEndTag();

output.WriteBreak();


方式二:
output.Write("<a href="http://www.csdn.net" mce_href="http://www.csdn.net" target='blank' style="color:Blue;cursor:Hand;" mce_style="color:Blue;cursor:Hand;">");
output.Write(this.Text2);
output.Write("</a>");

output.Write("<br>");


方式三:
HtmlGenericControl A = new HtmlGenericControl("A");
A.Attributes.Add("href", "http://blog.csdn.net/kntao");
A.Attributes.Add("target", "blank");
A.Style.Add(HtmlTextWriterStyle.Color, "Blue");
A.Style.Add(HtmlTextWriterStyle.Cursor, "Hand");
A.InnerText = this.Text3;
A.RenderControl(output);


第三种方式比第一二中方式效率低些,因为他要花些时间解析成HTML控件。

4. AddAttributesToRender方法,一般与RenderContents合用。

protected override void AddAttributesToRender(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Border, "0px");
writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding, "0px");
writer.AddAttribute(HtmlTextWriterAttribute.Cellspacing, "0px");
base.AddAttributesToRender(writer);
}


5。 CreateChildControls方法一般用于创建组合控件。

6。 INamingContainer接口,继承了此即可的控件,他的UniqueID和ClientID就会加上父控件的UniqueID和ClientID,分割符分别为$,_这样解决了控件命名冲突。

7. 实现复合控件的几个方法: CreateChildControls, ChildControlsCreated属性 ,EnsureChildControls,RecreateChildControl,Control属性, HasControls方法 HasEvent方法,FindControl方法

this.NamingContainer.ClientID + "_" + this.ID == this.ClientID;

8. 常用的开发技巧:

DesignMode运行模式和设计模式

屏蔽基类控件中的属性:Bindable,Browsable,EnditBrowsable

Page.Request.Browser属性检查当前浏览器的性能。

设置控件ID的规范,主要$和_运用。

FindControl通过遍历找控件

private Control FindControlExtend(string id, ControlCollection controls)
{
int i;
Control find = null;

for (i = 0; i < controls.Count; i++)
{
if (controls[i].ID == id)
{
find = controls[i];
break;
}

if (controls[i].Controls.Count > 0)
{
find = FindControlExtend(id, controls[i].Controls);
if (find != null)
break;
}
}

return find;

}


映射服务端控件值到客户端:

writer.AddAttribute("key",this.value);

就可以通过document.getElementBuId("").key获得

使用RegisterExpanddoAttribute方法

Page.ClientScript.RegisterExpandoAttribute("controlID","key",this.value)

禁止派生CompositeControl控件创建子控件

使用CreateChildControls注意事项:
if (String.IsNullOrEmpty(this.ValidateExpression) == false && this.DesignMode == false)
{
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this.rev.RenderControl(writer);
writer.RenderEndTag();
}


设计元属性DefaultValue

Render里有很多基类资源

条件编译
#if NET35 || NET20
using System.web.UI.WebControls.WebParts;
#else
//如果NET10 比编译任何代码
#endif
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐