前两天写的程序用了一下用户自定义控件, 在使用的时候总是感觉不太明白尤其是在给自定义控件传递参数和多个自定义控件的组合上不是很明白,今天花了点时间学习一下.总结以下以后也好学习:
1..用户自定义控件:为了提高开发效率和减少维护成本,人们把页面中的相同的东西提取出来放到一个控件中,其他页面只需要直接使用这个控件就可以达到效果(就象我们使用web标准控件似的).同时控件中的内容一修改引用的页面将自动同步修改,这样就大大的减少了维护难度.自定义控件是一个以.ascx为扩展名的文件在其中我们可以写静态或动态的内容:如:Header.ascx
< strong >< span style = " font-size: 24pt " > Header </ span ></ strong ><hr/>
使用方法:
<% @ Register Src = " userControl/Header.ascx " TagName = " Header " TagPrefix = " uc1 " %>
<! DOCTYPE html PUBLIC " -//W3C//DTD XHTML 1.0 Transitional//EN " " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd " >
< html xmlns = " http://www.w3.org/1999/xhtml " >
< head runat = " server " >
< title > Untitled Page </ title >
</ head >
< body >
< uc1:Header ID = " Header1 " runat = server />
< form id = " form1 " runat = " server " >
< div >
</ div >
</ form >
</ body >
</ html >
<%@ Register Src="userControl/Header.ascx" TagName="Header" TagPrefix="uc1" %>
注册用户自定义控件,Src为文件相对于引用页的位置,TagPrefix:为命名空间别名,TagName:为类别名.
<uc1:Header ID="Header1" runat=server />引用自定义控件
2..给自定义页面定义属性,在使用是给值:后台代码中加入headerText属性:Hpublic string headerText="Header";
修改自定义控件前台页面:<strong><span style="font-size: 24pt"><%=headerText %></span></strong><hr />让其动态输出内容.在引用页面中定义时给属性付值:
<uc1:Header ID="Header1" headerText="Custom HeaderText" runat=server /> 也可以在page_load事件中给自定义控件指定属性或调用他的公共方法:Header1.headerText="Default Page";
3.动态的指定空件:<asp:PlaceHolder ID=holder runat=server/>page-Load事件中:
protected void Page_Load( object sender, EventArgs e)
... {
control=LoadControl("userControl/Header.ascx");
this.holder.Controls.Add(control);
}
这个时候需要将contro转换成具体的类型才可以实现属性的设置,如:((userControl_Header)control).headerText = "Dynatic Header Text";
4.基本上就这么一点东西了.写自定义控件就和写一个类差不多了,可以给它指定属性和方法.还有一点不太明白:自定义控件中不能包含表单,但是一个页面中又只能有一个表单这样当我的页面中包含多个自定义控件时必须一次提交所有控件中的数据而无法只提交某个控件的数据.