|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我也不知道,我原来理解的,NET就是C++编程,只是与JAVA相对,呵呵。以为.ET就是高级C++编程。asp.net|创立|服务器|控件 择要
本文将具体解说一个复杂的自界说服务器控件的创立历程。经由过程这些内容,读者将懂得使用VisualStudio2005,创立和测试自界说服务器控件的基础办法。
注重:本文内容基于ASP.NET2.0手艺撰写,示例使用程序利用VisualStudio2005举行开辟。
创立一个复杂的自界说服务器控件
创立自界说服务器控件的历程包含:
(1)创立一个测试用Web站点使用程序;
(2)为新建站点使用程序,新增一个Web控件库项目;
(3)编写、编译和测试自界说服务器控件。
(1)创立一个测试用Web站点使用程序
使用VisualStudio2005,创立Web站点使用程序的办法良多,比方,在当地文件体系中创立、在IIS撑持下创立、在FTP站点中创立、在远程站点中创立等等。但是,不管怎样,开辟职员都应起首翻开VisualStudio2005,然后,单击"文件"菜单下"新建网站..."项目。这时候,将弹出以下的对话框。
新建网站对话框
是新建网站对话框。在该对话框中,开辟职员必要选择创立模板,地位、编程言语。如所示,示例接纳了ASP.NET网站模板,文件体系和C#编程言语来创立。当单击"断定"按钮以后,VisualStudio2005将在本机D:AppTest下创立一个test1文件夹。一切使用程叙文件都存储在文件夹内。默许情形下,test1文件夹内包含一个空的用于存储使用程序数据文件的App_Data文件夹,同时还分离包含一个Default.aspx和Default.aspx.cs文件。
经由过程以上步骤就创立了一个Web站点使用程序。该Web站点将用于测试所创立的Web自界说服务器控件。
(2)新增自界说服务器控件项目
在创立Web站点使用程序以后,开辟职员还必需在以后站点项目中,增加一个自界说服务器控件项目,也就是Web控件库项目。完成办法是:在翻开Web站点使用程序的条件下,单击"文件"菜单中"增加"项的子项"新建项目"。此时,VisualStudio2005将弹出如的对话框。
增加新项目对话框
是增加新项目对话框截图。该对话框分为三个设置部分:项目范例、模板、称号和地位。
在对话框左边有一个树形列表,个中包含各类项目范例。为创立Web控件库项目,应选择"VisualC#"节点的子节点"Windows"。此时,对话框右边将呈现该子节点对应的已安装模板,个中包含Windows使用程序、类库、Web控件库等。开辟职员应选中"Web控件库"一项。最初,必要设置Web控件库项目标称号和地位。为了便于办理,倡议将Web控件库项目和测试站点项目存储在统一文件夹内,因而,本例将称号设置为"HelloMyControl",将地位设置为D:AppTest est1。当单击"断定"按钮以后,VisualStudio2005将在D:AppTest est1目次下,主动创立一个HelloMyControl用于存储Web控件库相干文件。同时,VisualStudio2005的"办理计划资本办理器"将显现如所示内容。
办理计划资本办理器
如所示,办理计划资本办理器中包含两个项目。一个是前文创立的Web站点项目,另外一个是名为HelloMyControl的Web控件库项目,个中默许包含一个WebCustomControl1.cs文件。上面就能够入手下手编写、编译和测试自界说服务器控件了。
<P> (3)编写、编译和测试自界说服务器控件
必要完成的自界说服务器控件WelcomeLabel功效很复杂。相似于一个尺度Label控件。WelcomeLabel控件从System.Web.UI.WebControls.WebControl承继,个中自界说了一个string范例的Text属性。当控件运转时,将显现Text属性值和以后用户名的组合笔墨。比方,将Text属性值设置为"您好",那末终极显现的是"您好,某某!"。开辟职员能够用WelcomeLabel控件作为站点接待页面的一部分。
WelcomeLabel控件的完成代码包括在WebCustomControl1.cs文件中。该文件源代码以下所示。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Security.Permissions;
usingSystem.ComponentModel;
usingSystem.Text;
usingSystem.Web;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
namespaceHelloMyControl
{
[
AspNetHostingPermission(SecurityAction.Demand,Level=AspNetHostingPermissionLevel.Minimal),
AspNetHostingPermission(SecurityAction.InheritanceDemand,Level=AspNetHostingPermissionLevel.Minimal),
DefaultProperty("Text"),
ToolboxData("<{0}:WelcomeLabelrunat="server"></{0}:WelcomeLabel>")
]
publicclassWelcomeLabel:WebControl
{
//完成Text属性
[
Bindable(true),Category("Appearance"),DefaultValue(""),Description("文本内容."),Localizable(true)
]
publicvirtualstringText
{
get
{
strings=(string)ViewState["Text"];
return(s==null)?String.Empty:s;
}
set
{
ViewState["Text"]=value;
}
}
//重写RenderContents办法
protectedoverridevoidRenderContents(HtmlTextWriterwriter)
{
//对Text属性值编码,并写进输出流中
writer.WriteEncodedText(Text);
//判别Web哀求是不是无效。假如无效,则设置内容,并写进输入流中
if(Context!=null)
{
//猎取以后用户名
strings=Context.User.Identity.Name;
//假如以后用户名不为空,则剖析用户名并依照指定格局写进输入流中
if(s!=null&&s!=String.Empty)
{
string[]split=s.Split();
intn=split.Length-1;
if(split[n]!=String.Empty)
{
writer.Write(",");
writer.Write(split[n]);
}
}
}
writer.Write("!");
}
}
}
代码申明之控件基类:
假如服务器控件必要出现用户界面(UI)元素或任何其他客户端可见的元素,则应当从System.Web.UI.WebControls.WebControl(或派生类)派生该控件。假如控件要出现在客户端扫瞄器中不成见的元素(如埋没元素或meta元素),则应从System.Web.UI.Control派生该控件。本例明显必要出现用户界面元素,因而,自界说服务器控件类WelcomeLabel从WebControl基类承继。因为WebControl类从Control派生,因而,WelcomeLabel控件则主动承继基类供应的成员工具,这些工具多半与用户界面元素出现有关,比方,Font、ForeColor、BackColor、Width等等。别的,一样也是因为从WebControl承继,因而,WelcomeLabel控件还主动完成ASP.NET2.0新增的主题和皮肤功效。实践上,因为WelcomeLabel控件与ASP.NET2.0的内置服务器控件Label有着良多类似的地方,因而,从功效完成的角度动身,最好的体例应当是使得WelcomeLabel控件类从Label类承继。但是,本例为了申明界说属性和界说属性元数据的完成办法,因而,从WebControl基类承继。
代码申明之Text属性:
如上源代码所示,WelcomeLabel完成了一个Text属性,并利用视图形态存储该属性值。利用视图形态保留回发间的Text值。每次回发时,将从头创立页并从视图形态复原值。假如Text值并未存储在视图形态中,则在每次回发时会将值设置为其默许的Empty。ViewState属性承继自WebControl,是保留数据值的字典。经由过程利用String键,可输出和检索值。本例中将"Text"用作键。字典中的项被范例化为Object,然后必需将其强迫转换为属性范例。
<P> 代码申明之RenderContents办法:
一般,在从WebControl派生控件并出现单个元素时,应重写RenderContents办法(而不是Render办法),以出现控件标志中的内容。在出现控件及其款式属性的入手下手标志以后,WebControl的Render办法将挪用RenderContents。假如重写Render办法以写进内容,则控件将丧失天生到WebControl的Render办法中的款式出现逻辑。
在源代码中,WelcomeLabel控件重写了承继的RenderContents办法以出现Text属性及其他一些内容。传进RenderContents办法的参数是HtmlTextWriter范例的工具,它是具有出现标志和其他HTML(和HTML变量)标志的办法的有用工具类。大概读者已注重到:WelcomeLabel一连挪用了HtmlTextWriter工具的Write办法,而不是先实行字符串串连,然后挪用Write办法。这类做法可进步控件功能。字符串串连必要工夫和内存来创立字符串,然后写进流。
代码申明之元数据属性标志:
如上代码所示,在WelcomeLabel类声明前包含以下3个元数据属性标志。
(1)AspNetHostingPermissionAttribute
它是代码会见平安属性。该属性使JIT编译器反省链接到WelcomeLabel的代码是不是具有AspNetHostingPermission权限。一切的大众ASP.NET类均利用此属性标志。应将AspNetHostingPermissionAttribute使用于控件,以对部分受信托的被挪用方举行平安反省。
(2)DefaultPropertyAttribute
它是计划时属性(Attribute),它指定控件的默许属性(Property)。在可视化计划器中,当页开辟职员在计划图面上单击控件时,属性扫瞄器一般凸起显现此默许属性。
(3)ToolboxDataAttribute
它用于指定元素的格局字符串。假如在工具箱中双击控件或将其从工具箱拖动到计划图面上时,该字符串将成为控件的标志。关于WelcomeLabel,该字符串创立此元素:
<aspSample:WelcomeLabelrunat="server"></aspSample:WelcomeLabel>
别的,在属性Text的完成过程当中还界说了以下元数据属性。
(1)BindableAttribute(被指定为true或false)
该元数据属性可用于指定将属性绑定到数据对可视化计划器是不是成心义。比方,在VisualStudio2005中,假如属性标志为Bindable(true),则该属性可显现在"数据绑定"对话框中。假如属性(Property)没有利用此属性(Attribute)标志,则属性(Property)扫瞄器会揣度其值为Bindable(false)。
(2)CategoryAttribute
该元数据属性用于指定怎样在可视化计划器的属性扫瞄器中对属性举行分类。比方,当页开辟职员利用属性扫瞄器的分类视图时,Category("Appearance")将告诉属性扫瞄器在"表面"种别中显现属性。能够依据属性扫瞄器中的现有种别指定字符串参数,也能够创立本人的种别。
(3)DescriptionAttribute
该元数据属性用于指定属性的冗长形貌。在VisualStudio2005中,属性扫瞄器将在"属性"窗口底部显现选定的属性的形貌。
(4)DefaultValueAttribute
该元数据属性用于指定属性的默许值。此值应与附属性会见器(getter)前往的默许值不异。在VisualStudio2005中,DefaultValueAttribute同意页开辟职员经由过程在"属性"窗口中唤出快速菜单然后单击"重置"按钮将属性值重置为其默许值。
(5)LocalizableAttribute(指定为true或false)
该元数据属性用于指定当地化属性对可视化计划器是不是成心义。当某属性标志为Localizable(true)时,可视化计划器会在对当地化资本举行序列化时包括该属性。对控件轮询可当地化的属性时,计划器会将此属性值保留到非特定于地区性的资本文件或其他当地化源中。
在编写完成WelcomeLabel控件的源代码以后,接着必要编译和测试所完成的自界说服务器控件。为了完成这一目标,开辟职员必要在测试用Web站点中援用Web控件库项目输入,并编写相干代码以便测试服务器控件。
在Web站点中完成Web控件库项目援用的办法对照复杂。起首,右键单击办理计划资本办理器中的Web站点项目称号,在弹出的菜单当选中"增加援用..."一项。此时,将主动弹出如所示的窗口。
增加援用对话框
如所示,在增加援用窗口中包含5个选项卡,个中包含一个名为"项目"的选项卡。单击它可发明在其列表中包含一个上文创立的HelloMyControl项目。选中该项并单击"断定"按钮,便可完成项目援用。
在完成项目援用后,VisualStudio2005将主动在Web站点项目中增加一个Bin文件夹,并在个中包括了HelloMyControl.dll和HelloMyControl.pdb文件。前者是控件程序集,后者中则保留着调试和项目形态信息。如许,Web站点就可以够顺遂利用HelloMyControl项目标输入了。以下显现了为测试WelcomeLabel控件而创立的Default.aspx文件源代码。
<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"Inherits="_Default"%>
<%@RegisterTagPrefix="self"Namespace="HelloMyControl"Assembly="HelloMyControl"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
<title>创立一个复杂的自界说服务器控件</title>
</head>
<body>
<formid="form1"runat="server">
<div>
<self:WelcomeLabelText="您好"ID="WelcomeLabel1"runat="server"BackColor="Wheat"ForeColor="SaddleBrown"/>
</div>
</form>
</body>
</html>
如上粗体代码所示,页面起首使用@Register指令将WelcomeLabel控件引进,然后,经由过程<self:WelcomeLabel>标志详细唆使控件的地位,和属性设置等。在<self:WelcomeLabel>标志中,次要设置了Text、BackColor和ForeColor属性,它们分离用于界说控件的文本内容、背景色彩和远景色彩。
如显现了实行Default.aspx的页面截图。
示例使用程序截图
小结
本文经由过程一个复杂示例申明了完成自界说服务器控件的基础历程。经由过程这些内容,读者大概已发明:创立自界说服务器控件与创立一般Web使用程序之间有着较年夜区分,这些不同次要表现在创立形式、所使用手艺等方面。在随后的系列文章中,将具体切磋使用ASP.NET2.0手艺创立自界说服务器控件的相干内容。
有个问题想请教你一下,呵呵:)你觉得将来学什么方向比较好,我真是想不出来,知道的太少了,麻烦了。 |
|