|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
来吧!老师们!我代表千千万万的asp.net/C#的初学者在这里呼唤着!asp.net|服务器|控件 控件出现是指向HTTP输入流中写进标志文本的历程。服务器经由过程HTTP输入流向客户端发送天生的标志文本,这些文本将会经由过程客户端扫瞄器转换为可视化的元素显现出来。利用控件出现,开辟职员能够将HTML标志、剧本代码、CSS款式表等等输出到客户端扫瞄器。完成服务器控件出现次要有两种体例:一是Control类的Render办法,二是WebControl的RenderContents办法。本文重点先容利用Control类的Render办法完成控件出现的使用。
利用HtmlTextWriter类
Control类的Render办法次要用于完成控件出现,其声明朝码以下:
protectedvirtualvoidRender(HtmlTextWriteroutput)
如上代码所示,Render办法的参数是一个HtmlTextWriter范例。为了更好的使用Render办法,读者应起首懂得HtmlTextWriter类及其相干内容。
依据MSDN2005的形貌,HtmlTextWriter类用于将标志字符和文本写进到ASP.NET服务器控件输入流。此类供应了ASP.NET服务器控件在向客户端出现标志时所利用的格局设置功效。为了完成类的功效,HtmlTextWriter类界说了多个字段、属性和办法。因为成员工具浩瀚,本文只选择了一些经常使用成员加以申明,同时,还将先容一些ASP.NET2.0的新增成员。
经常使用成员工具包含:
・AddAttribute办法
关于HtmlTextWriter工具经由过程对RenderBeginTag办法的后续挪用创立的元素,向其入手下手标志中增加指定的标志属性和值。
・AddStyleAttribute办法
关于HtmlTextWriter工具经由过程对RenderBeginTag办法的后续挪用创立的元素,向其入手下手标志中增加标志款式属性。
・Write办法
将指定命据范例连同任何挂起的制表符间距一同写进到输入流。
・WriteAttribute办法
将标志属性及其值写进到输入流。
・WriteBeginTag办法
任何制表符间距和指定标志元素的入手下手标志写进到输入流。
・WriteEndTag办法
写进指定的标志元素的任何制表符间距和停止标志。
・Encoding属性
猎取HtmlTextWriter工具用于将内容写进页的编码。
・Indent属性
猎取或设置用以缩进每行标志的入手下手地位的制表符地位数。
・NewLine属性
猎取或设置由HtmlTextWriter工具利用的行停止符字符串。
关于初学者而言,倡议重点把握以上成员工具的使用。别的,ASP.NET2.0还为HtmlTextWriter类新增了一些成员,这些成员包含:
・BeginRender办法
关照HtmlTextWriter工具或派生类的工具,某个控件将会出现。
・EndRender办法
关照HtmlTextWriter工具或某个派生类的工具,某控件已完成出现。
・IsValidFormAttribute办法
反省一个属性以确保它能够在<form>标志元素的入手下手标志中出现。
・WriteEncodedUrl办法
对指定的URL举行编码,然后将它写进到输入流。URL能够包含参数。
・WriteEncodedText办法
对哀求的设备的指定文本举行编码,然后将其写进到输入流。
・WriteBreak办法
将<br/>标志元素写进到输入流。
<P> 利用Render办法完成控件出现
1、基本常识
本文所解说的Render办法从属于System.Web.UI.Controls.Control类。该类是创立服务器控件的基类,良多控件类均承继自该类。在Control类中包含三个用于完成控件出现的办法:Render、RenderChildren和RenderControl。它们都利用HtmlTextWriter的实例作为参数,它们同意为一个HtmlTextWriter工具供应服务器控件的内容,并将其内容封装至HTTP输入流中输入到客户端显现。上面复杂对这三个办法举行复杂先容。
(1)protectedvirtualvoidRender(HtmlTextWriterwriter);
该办法用于将服务器控件内容发送到供应的HtmlTextWriter工具,此工具编写将在客户端出现的内容。在开辟服务器控件时,能够重写此办法以出现服务器控件。
(2)protectedvirtualvoidRenderChildren(HtmlTextWriterwriter);
该办法用于将服务器控件子级的内容输入到供应的HtmlTextWriter工具,此工具编写将在客户端出现的内容。该办法关照ASP.NET出现页中的一切ActiveServerPages代码。假如页上没有任何ASP代码,此办法将出现服务器控件的一切子控件。
(3)protectedvirtualvoidRenderControl(HtmlTextWriterwriter);和protectedvoidRenderControl(HtmlTextWriterwriter,ControlAdapteradapter)
RenderControl有两个重载办法,它们都用于将服务器控件的内容输入到所供应的HtmlTextWriter工具中。假如已启用跟踪功效,则存储有关控件的跟踪信息。假如服务器控件的Visible属性设置为true,该办法将断定是不是启用页的跟踪功效。假如启用,它将存储与控件有关的跟踪信息,同时向页出现服务器控件的内容。别的,前一个重载体例是ASP.NET2.0从ASP.NET1.0中承继而言,后一个重载体例是ASP.NET2.0新增的。后者详细利用供应的ControlAdapter工具将服务器控件内容输入到供应的HtmlTextWriter工具。个中参数adapter是ControlAdapter范例,它用于界说出现的ControlAdapter。当完成在各类设备和扫瞄器中运转的服务器控件时,该办法对照经常使用。
以上3个办法看起来仿佛是自力的3个办法,但是,实践上它们之间存在亲切的接洽。读者可经由过程浏览以下表示性代码,从而了解它们之间的干系。
//RenderCotrol办法基础完成
publicvoidRenderControl(HtmlTextWriteroutput)
{
if(Visible)
{
Render(output);
}
}
//Render办法基础完成
protectedvirtualvoidRender(HtmlTextWriteroutput)
{
RenderChildren(output);
}
//RenderChildren办法基础完成
protectedvirtualvoidRenderChildren(HtmlTextWriteroutput)
{
foreach(ControlcinControls)
{
c.RenderControl(output);
}
}
如上代码所示,个中枚举了RenderControl、Render、RenderChildren办法的完成思绪。不言而喻的是,在控件出现过程当中,这三个办法都在起着感化,并且利用了一个复杂的递回挪用历程。大致而言,能够了解为:
(1)页面框架创建一个HtmlTextWriter类的实例;
(2)页面框架将这个实例工具传送给RenderControl办法;
(3)RenderControl办法反省控件的可视属性Visible是不是为true。假如为true,RenderControl办法将挪用Render办法;假如为false,则不出现该控件和其子控件;
(4)Render办法实行默许完成,挪用RenderChildren办法;
(5)RenderChildren办法依照默许完成中的设定挪用每一个子控件的RenderControl办法;
实践上,假如读者短工夫内不克不及了解以上历程也没有很年夜的干系。关于初学者而言,关头是要记着最主要、最经常使用的是Render办法。控件开辟者能够经由过程重写Render办法完成出现控件的义务。
2、示例使用
上文先容了利用Control类的Render办法完成控件出现的基本常识。上面将经由过程一个典范示例,匡助读者开端了解Render的利用办法。示例效果如所示。
最终效果
如所示,该服务器控件出现了一个超链接,而且设置了文本为白色。当用户单击白色笔墨时,页面将转向微软站点。固然,用户能够经由过程属性LinkUrl来设置超链接地点。
上面枚举了示例完成源代码。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Text;
usingSystem.Web;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
namespaceUsingRenderControl
{
[DefaultProperty("LinkUrl")]
[ToolboxData("<{0}:RenderControlrunat=server></{0}:RenderControl>")]
publicclassRenderControl:Control
{
//完成LinkUrl
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("http://localhost/")]
[Localizable(true)]
publicstringLinkUrl
{
get{Strings=(String)ViewState["LinkUrl"];
return((s==null)?String.Empty:s);}
set{ViewState["LinkUrl"]=value;}
}
//重写Render办法
protectedoverridevoidRender(HtmlTextWriterwriter)
{
writer.AddAttribute(HtmlTextWriterAttribute.Href,LinkUrl);
writer.AddStyleAttribute(HtmlTextWriterStyle.Color,"red");
writer.RenderBeginTag(HtmlTextWriterTag.A);
writer.Write("扫瞄网站");
writer.RenderEndTag();
}
}
}
如上代码完成了自界说服务器控件类RenderControl。该类从Control基类承继,详细完成了暗示超链接地点的LinkUrl(默许值为http://localhost/),偏重写了Render办法。在重写Render的过程当中,挪用了一些HtmlTextWriter类成员,比方,Writer、AddAttribute、AddStyleAttribute、RenderBeginTag和RenderEndTag办法等。别的,大概开辟职员在利用Writer办法过程当中,必要出现一个对照长的字符串。倡议此时多多利用Writer办法,而不要利用字符串级联大概StringBuilder类的相干办法举行完成。由于,那样将会损耗大批的体系工夫和内存,效力较低。
<P> 大概有一些读者会问,假如将服务器控件出现的多行代码的按次变更一下,是不是会有甚么分歧呢?比方,假定起首顺次使用RenderBeginTag、Write、RenderEndTag办法,然后再挪用AddAttribute和AddStyleAttribute办法,那末会显现不异的效果吗?谜底是不是定的。这里必要夸大的是:在出现控件的过程当中,起首要界说服务器控件的属性和CSS款式等外容,然后再界说服务器控件的主体内容,这类按次不克不及改动的。
别的,假如读者感乐趣能够在代码中完成一个Text属性,用于猎取大概设置控件所显现的文本。如许,在Render办法中,利用Write办法输入的"扫瞄网站"笔墨内容则可由Text属性取代。
上面枚举了为利用以上的自界说服务器控件,而创立的Default.aspx文件源代码。
<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"Inherits="_Default"%>
<%@RegisterTagPrefix="Sample"Assembly="UsingRenderControl"Namespace="UsingRenderControl"%>
<!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>利用Render办法完成控件出现</title>
</head>
<body>
<formid="form1"runat="server">
<div>
<Sample:RenderControlrunat="server"ID="CustomerControl"LinkUrl="http://www.microsoft.com/">
</Sample:RenderControl>
</div>
</form>
</body>
</html>
以上代码对照复杂,个中次要声了然自界说服务器控件RenderControl,并设置其LinkUrl属性值为http://www.microsoft.com,即微软站点地点。
当用户在扫瞄器中运转以上页面,并检察相干的Html源文件时,可失掉以下的代码:
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<head>
<title>利用Render办法完成控件出现</title>
</head>
<body>
<formname="form1"method="post"action="Default.aspx"id="form1">
<div>
<inputtype="hidden"name="__VIEWSTATE"id="__VIEWSTATE"value="/wEPDwUJNzMyMTY5NTU2ZGQQYrLd/G+vm1h41r2CEkxID63o5g=="/>
</div>
<div>
<ahref="http://www.microsoft.com/"style="color:red;">扫瞄网站</a>
</div>
</form>
</body>
</html>
经由过程察看以上代码可知,自界说服务器控件RenderControl实践出现的了局是粗体所示部分的代码,其终极出现为一个暗示超链接的<a>标志。
小结
本文起首先容了HtmlTextWriter类的基础常识,然后解说了利用Render办法完成控件出现的使用。在随后的一篇文章中,笔者将申明别的一种完成控件出现的办法。从服务器控件开辟手艺整体而言,控件出现手艺是开辟过程当中最为经常使用,也是最为复杂的内容。倡议读者可以纯熟把握个中的内容。
完全不一样的。.net其实我也说不太清,.net可以把他理解为跟J2EE相对的工具。c++主要做系统相关的开发你要学.net的话就应该学C#。(其实微软在.NET平台上也考虑了给C++留一个地位。 |
|