|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
实不相瞒,Java是我见过的执行效率最低的程序设计语言,前不久在CSDN论坛上有个评测,计算9999的阶乘,同样的循环算法,Java的耗时是.NET的5倍。asp.net|服务器|控件 他迷上了珍珠奶茶。说假话,之前他一向以为珍珠奶茶挺蠢的,真不晓得是那一个天赋的点子,竟然把粉圆和泡沫红茶搅和在一同,还加上一根那末幽默的超年夜吸管;mm刚迷上珍珠奶茶的时分,他还挺五体投地的呢。但是日今后,他几近每天城市往买一杯珍珠奶茶,愈喝愈以为珍珠奶茶的风味很出格,切实其实满好喝的。晓得他迷上珍珠奶茶,mm还笑他:"早跟你说好喝你不信,男生就是愚钝。"
--管家琪《珍珠奶茶的勾引》
■面向工具的粉圆-服务器控件模子
XHTML的一个主要方针就是将布局与体现分别,如:<divid="author">老燕</div>;但从一个静态网站的角度来看,必要进一步将网页布局与内容分别,即:<divid="author"><!--静态数据--></div>,比拟较而言,网页布局是静态,内容是静态。
charly的《内容公布体系的开辟》激发我对一段旧事的追思,作者会商的命题是怎样用静态数据天生静态页面,办法是用数据交换模板中指定标签。引伸开来就是ASP程序员十分长远的妄想--代码与页面分别,即制止呈现<divid="author"><%=author%></div>之类HTML代码与ASP程序代码混同在一块的情形,,而办理之道,用的就是charly形貌的办法--正则表达式交换。
假如用静态/静态这个角度往剖析一个.aspx文件,能够将其分红两部分:一部分是静态的一连的文本,如:<html>……<body>;另外一部分是静态的特别标签,如:<asp:TextBoxid="txtName"runat="server"/>。二者所以否具有属性runat="server"为判别尺度。ASP.NET将后一部分称之为服务器控件,程序员以服务器控件为工具模子来界说Web使用程序的用户界面,把持用户交互;而前一部分在运转时也将被创立成一种特别的控件--LiteralControl。
假如用ASP面向历程的办法来处置所谓的服务器控件,就是依据用户的需求间接天生对应的HTML代码;而在ASP.NET中,程序员与HTML代码被笼统的面向工具的服务器控件观点断绝开来。既然面向工具,服务器控件就应当具有属性(property)来形貌本人的形态;用办法(method)形貌本人的举措;必要事务(event)来触发办法,改动形态,最初主动天生响应的HTML代码。
固然我们不必要重新来构架这个模子,一切的服务器控件,包含Page类,都间接或直接承继于System.Web.UI.Control类,而显现为HTML表单位素的控件,常常又承继于System.Web.UI.WebControl类,称为Web控件。下例是一个复杂的自界说控件典范,会见该例的TestMyControls.aspx页,检察源代码会发明控件对应的Hhtml代码为"1"。
//MyControls.cs自界说控件集
usingSystem;
usingSystem.Web.UI;
namespaceessay{
publicclassMyFirstControl:Control{//输入属性Number相对值控件
privateint_number;
publicintNumber{//Number界说属性
get{return_number;}
set{_number=value;}
}
//重写Control.Render办法,天生控件对应的HTML代码
protectedoverridevoidRender(HtmlTextWriterwriter){
writer.Write(Math.Abs(Number));
}
}
}
//TestMyControls.aspx页面文件,<%Register%>注册自界说控件集
//<mc:……>在页面增添自界说控件并将属性Number值设为-1
<%@RegisterTagPrefix="mc"Namespace="essay"Assembly="essay"%>
<HTML><HEAD></HEAD><body>
<formrunat="server">
<mc:MyFirstControlid="test1"Number="-1"runat="server"/>
</form></body></HTML> ■葛玲是谁?-服务器控件的形态坚持
多少年前有一个火腿肠告白,对话以下:
吕丽萍:冬宝,在想啥呢?
葛优:想葛玲
吕丽萍:别想了,我给你先容一名新伴侣--DUDU牌火腿肠
吕丽萍:(过一会儿)还想葛玲吗?
葛优:葛玲是谁?
人机交互计划的一个主要内容是交互事情流,而完成交互事情流的条件是形态坚持,不然就会呈现"葛玲是谁"如许的滑稽。
控件能够使用传统的cookies、session、埋没控件等办法来存储形态值,在随想八》中我们已切磋过视图形态(ViewState)的感化和道理,实质上,ASP.NET制造出的有形态、一连的页面形态坚持机制是经由过程页面埋没数据。接上去我们经由过程改革上例进一步研讨使用视图形态来完成控件形态坚持的细节。
//MyControls.cs自界说控件集
……
publicclassMyFirstControl:Control{//输入属性Number相对值控件
privateint_number;
publicintNumber{……}
//增添属性NumberInViewState,用以存取属性Number的视图形态值
publicintNumberInViewState{
get{
objecto=ViewState["NumberInViewState"];
return(o==null)?0:(int)o;
}
set{ViewState["NumberInViewState"]=value;}
}
protectedoverridevoidRender(HtmlTextWriterwriter){……}
}
……
//TestMyControls.aspx页面文件
<html>
……
<%@PageLanguage="C#"%>
<scriptrunat="server">
protectedoverridevoidOnLoad(EventArgse)
{
test1.NumberInViewState--;//视图形态响应值自减1
test1.Number=test1.NumberInViewState;//自界说控件值与视图值坚持分歧
base.OnLoad(e);
}
</script>
<formrunat="server">
<mc:MyFirstControlid="test1"runat="server"/>
<inputtype="submit"/>
</form></body></html>
■换杯子仍是换粉圆?-控件树与服务器控件的性命周期
在运转期,页面框架会在杯子里放进指定的服务器控件类实例,固然它们不是胡乱聚积在一块,而是组分解一颗控件树,0-2为例2页面的控件树范型,我们能够经由过程控件的ID或在树中的地位把持控件,也能够增添或删除控件。
在设想的有形态、一连的页眼前提,意味着在初始哀求后,页面必需保留每个控件的形态,在回传(PostBack)后,起首是恢复控件本来的形态,再处置新的哀求。也就是说,每个客户端对统一个页面的一连N次哀求,相称于向奶茶展一连要了N杯统一种类的奶茶,第一杯珍珠奶茶中粉圆形态是默许的,从主顾提出第二杯奶茶哀求起,伴计必需先把这杯中粉圆形态盘弄成与端给主顾时的上一杯形态千篇一律,然后依据主顾新的事务举行调剂。如0-2。具体历程请查阅MSDN的《控件实行性命周期》。
这类惹是生非的交互事情流完成办法是要支付价值的,作为编程模子而言,程序员能够在服务器控件的笼统观点上轻松完成,但对全部体系的功能而言,ASP.NET并未对客户端和服务器端做过量少负载功能优化,用合金枪头(我的一名网友)的话来讲,"假如就连选择籍贯省市的下拉框都要用服务器控件来提交一下,同时革新页面的话,那切实其实很恶心"。
一个很天然的设法是为何对每次哀求我们都要把全部杯子换失落呢?假如仅仅是换失落几个粉圆和一小部分奶茶,将年夜年夜改良体系功能,这就是Ajax手艺的起点。因为二次编译器太复杂,那么建议只是在安装程序的时候编译一次,而不类似java那样运行就编译。并且我觉得,一次痛苦,总比多次低效率要舒服多了。 |
|