<HTML><HEAD><TITLE>Asp.net中
服务端控件事件是如何触发的:::http://www.booro.com</TITLE>
<SCRIPTlanguage=JavaScript>
helpstat=false;
stprompt=true;
basic=false;
functionthelp(swtch){
if(swtch==1){
basic=false;
stprompt=false;
helpstat=true;
}elseif(swtch==0){
helpstat=false;
stprompt=false;
basic=true;
}elseif(swtch==2){
helpstat=false;
basic=false;
stprompt=true;
}
}
functionAddText(NewCode){
document.myform.txtcontent.value+=NewCode
}
functionemail(){
if(helpstat){
alert("Email标记\n插入Email超级链接\n用法1:[email]web@booro.com[/email]\n用法2:
[email=web@booro.com特鸟飞勤[/email]");
}elseif(basic){
AddTxt="[email][/email]";
AddText(AddTxt);
}else{
txt2=prompt("链接显示的文字.\n如果为空,那么将只显示你的Email地址","");
if(txt2!=null){
txt=prompt("Email地址.","stskyweb@21cn.com");
if(txt!=null){
if(txt2==""){
AddTxt="[email]"+txt+"[/email]";
}else{
AddTxt="[email="+txt+"]"+txt2;
AddText(AddTxt);
AddTxt="[/email]";
}
AddText(AddTxt);
}
}
}
}
functionflash(){
if(helpstat){
alert("Flash动画\n插入Flash动画.\n用法:[flash]Flash文件的地址[/flash]");
}elseif(basic){
AddTxt="[flash][/flash]";
AddText(AddTxt);
}else{
txt=prompt("Flash文件的地址","http://");
if(txt!=null){
AddTxt="[flash]"+txt;
AddText(AddTxt);
AddTxt="[/flash]";
AddText(AddTxt);
}
}
}
functionshowsize(size){
if(helpstat){
alert("文字大小标记\n设置文字大小.\n可变范围1-6.\n1为最小6为最大.\n用法:[size="+size+"]这是"+size+"文字[/size]");
}elseif(basic){
AddTxt="[size="+size+"][/size]";
AddText(AddTxt);
}else{
txt=prompt("大小"+size,"文字");
if(txt!=null){
AddTxt="[size="+size+"]"+txt;
AddText(AddTxt);
AddTxt="[/size]";
AddText(AddTxt);
}
}
}
functionbold(){
if(helpstat){
alert("加粗标记\n使文本加粗.\n用法:[b]这是加粗的文字[/b]");
}elseif(basic){
AddTxt="[b][/b]";
AddText(AddTxt);
}else{
txt=prompt("文字将被变粗.","文字");
if(txt!=null){
AddTxt="[b]"+txt;
AddText(AddTxt);
AddTxt="[/b]";
AddText(AddTxt);
}
}
}
functionitalicize(){
if(helpstat){
alert("斜体标记\n使文本字体变为斜体.\n用法:[i]这是斜体字[/i]");
}elseif(basic){
AddTxt="[i][/i]";
AddText(AddTxt);
}else{
txt=prompt("文字将变斜体","文字");
if(txt!=null){
AddTxt="[i]"+txt;
AddText(AddTxt);
AddTxt="[/i]";
AddText(AddTxt);
}
}
}
functionquote(){
if(helpstat){
alert("引用标记\n引用一些文字.\n用法:[quote]引用内容[/quote]");
}elseif(basic){
AddTxt="[quote][/quote]";
AddText(AddTxt);
}else{
txt=prompt("被引用的文字","文字");
if(txt!=null){
AddTxt="[quote]"+txt;
AddText(AddTxt);
AddTxt="[/quote]";
AddText(AddTxt);
}
}
}
functionshowcolor(color){
if(helpstat){
alert("颜色标记\n设置文本颜色.任何颜色名都可以被使用.\n用法:[color="+color+"]颜色要改变为"+color+"的文字[/color]");
}elseif(basic){
AddTxt="[color="+color+"][/color]";
AddText(AddTxt);
}else{
txt=prompt("选择的颜色是:"+color,"文字");
if(txt!=null){
AddTxt="[color="+color+"]"+txt;
AddText(AddTxt);
AddTxt="[/color]";
AddText(AddTxt);
}
}
}
functioncenter(){
if(helpstat){
alert("对齐标记\n使用这个标记,可以使文本左对齐、居中、右对齐.\n用法:[align=center|left|right]要对齐的文本[/align]");
}elseif(basic){
AddTxt="[align=center|left|right][/align]";
AddText(AddTxt);
}else{
txt2=prompt("对齐样式\n输入'center'表示居中,'left'表示左对齐,'right'表示右对齐.","center");
while((txt2!="")&&(txt2!="center")&&(txt2!="left")&&(txt2!="right")&&(txt2!=null))
{
txt2=prompt("错误!\n类型只能输入'center'、'left'或者'right'.","");
}
txt=prompt("要对齐的文本","文本");
if(txt!=null){
AddTxt="\r[align="+txt2+"]"+txt;
AddText(AddTxt);
AddTxt="[/align]";
AddText(AddTxt);
}
}
}
functionhyperlink(){
if(helpstat){
alert("超级链接标记\n插入一个超级链接标记\n使用方法:[url]http://www.aspsky.net[/url]\nUSE:
[url=http://www.aspsky.net]链接文字[/url]");
}elseif(basic){
AddTxt="[url][/url]";
AddText(AddTxt);
}else{
txt2=prompt("链接文本显示.\n如果不想使用,可以为空,将只显示超级链接地址.","");
if(txt2!=null){
txt=prompt("超级链接.","http://");
if(txt!=null){
if(txt2==""){
AddTxt="[url]"+txt;
AddText(AddTxt);
AddTxt="[/url]";
AddText(AddTxt);
}else{
AddTxt="[url="+txt+"]"+txt2;
AddText(AddTxt);
AddTxt="[/url]";
AddText(AddTxt);
}
}
}
}
}
functionimage(){
if(helpstat){
alert("图片标记\n插入图片\n用法:[img]http://www.aspsky.net/logo.gif[/img]");
}elseif(basic){
AddTxt="[img][/img]";
AddText(AddTxt);
}else{
txt=prompt("图片的URL","http://");
if(txt!=null){
AddTxt="\r[img]"+txt;
AddText(AddTxt);
AddTxt="[/img]";
AddText(AddTxt);
}
}
}
functionshowcode(){
if(helpstat){
alert("代码标记\n使用代码标记,可以使你的程序代码里面的html等标志不会被破坏.\n使用方法:\n[code]这里是代码文字[/code]");
}elseif(basic){
AddTxt="\r[code]\r[/code]";
AddText(AddTxt);
}else{
txt=prompt("输入代码","");
if(txt!=null){
AddTxt="\r[code]"+txt;
AddText(AddTxt);
AddTxt="[/code]";
AddText(AddTxt);
}
}
}
functionlist(){
if(helpstat){
alert("列表标记\n建造一个文字或则数字列表.\n\nUSE:[list][*]项目一[/*][*]项目二[/*][*]项目三[/*]
[/list]");
}elseif(basic){
AddTxt="[list][*][/*][*][/*][*][/*][/list]";
AddText(AddTxt);
}else{
txt=prompt("列表类型\n输入'A'表示有序列表,'1'表示无序列表,留空表示无序列表.","");
while((txt!="")&&(txt!="A")&&(txt!="a")&&(txt!="1")&&(txt!=null))
{
txt=prompt("错误!\n类型只能输入'A'、'1'或者留空.","");
}
if(txt!=null){
if(txt==""){
AddTxt="[list]";
}else{
AddTxt="[list="+txt+"]";
}
txt="1";
while((txt!="")&&(txt!=null)){
txt=prompt("列表项\n空白表示结束列表","");
if(txt!=""){
AddTxt+="[*]"+txt+"[/*]";
}
}
AddTxt+="[/list]";
AddText(AddTxt);
}
}
}
functionshowfont(font){
if(helpstat){
alert("字体标记\n给文字设置字体.\n用法:[face="+font+"]改变文字字体为"+font+"[/face]");
}elseif(basic){
AddTxt="[face="+font+"][/face]";
AddText(AddTxt);
}else{
txt=prompt("要设置字体的文字"+font,"文字");
if(txt!=null){
AddTxt="[face="+font+"]"+txt;
AddText(AddTxt);
AddTxt="[/face]";
AddText(AddTxt);
}
}
}
functionunderline(){
if(helpstat){
alert("下划线标记\n给文字加下划线.\n用法:[u]要加下划线的文字[/u]");
}elseif(basic){
AddTxt="[u][/u]";
AddText(AddTxt);
}else{
txt=prompt("下划线文字.","文字");
if(txt!=null){
AddTxt="[u]"+txt;
AddText(AddTxt);
AddTxt="[/u]";
AddText(AddTxt);
}
}
}
functionsetfly(){
if(helpstat){
alert("飞翔标记\n使文字飞行.\n用法:[fly]文字为这样文字[/fly]");
}elseif(basic){
AddTxt="[fly][/fly]";
AddText(AddTxt);
}else{
txt=prompt("飞翔文字","文字");
if(txt!=null){
AddTxt="[fly]"+txt;
AddText(AddTxt);
AddTxt="[/fly]";
AddText(AddTxt);
}
}
}
functionmove(){
if(helpstat){
alert("移动标记\n使文字产生移动效果.\n用法:[move]要产生移动效果的文字[/move]");
}elseif(basic){
AddTxt="[move][/move]";
AddText(AddTxt);
}else{
txt=prompt("要产生移动效果的文字","文字");
if(txt!=null){
AddTxt="[move]"+txt;
AddText(AddTxt);
AddTxt="[/move]";
AddText(AddTxt);
}
}
}
functionshadow(){
if(helpstat){
alert("阴影标记\n使文字产生阴影效果.\n用法:[SHADOW=宽度,颜色,边界]要产生阴影效果的文字[/SHADOW]");
}elseif(basic){
AddTxt="[SHADOW=255,blue,1][/SHADOW]";
AddText(AddTxt);
}else{
txt2=prompt("文字的长度、颜色和边界大小","255,blue,1");
if(txt2!=null){
txt=prompt("要产生阴影效果的文字","文字");
if(txt!=null){
if(txt2==""){
AddTxt="[SHADOW=255,blue,1]"+txt;
AddText(AddTxt);
AddTxt="[/SHADOW]";
AddText(AddTxt);
}else{
AddTxt="[SHADOW="+txt2+"]"+txt;
AddText(AddTxt);
AddTxt="[/SHADOW]";
AddText(AddTxt);
}
}
}
}
}
functionglow(){
if(helpstat){
alert("光晕标记\n使文字产生光晕效果.\n用法:[GLOW=宽度,颜色,边界]要产生光晕效果的文字[/GLOW]");
}elseif(basic){
AddTxt="[glow=255,red,2][/glow]";
AddText(AddTxt);
}else{
txt2=prompt("文字的长度、颜色和边界大小","255,red,2");
if(txt2!=null){
txt=prompt("要产生光晕效果的文字.","文字");
if(txt!=null){
if(txt2==""){
AddTxt="[glow=255,red,2]"+txt;
AddText(AddTxt);
AddTxt="[/glow]";
AddText(AddTxt);
}else{
AddTxt="[glow="+txt2+"]"+txt;
AddText(AddTxt);
AddTxt="[/glow]";
AddText(AddTxt);
}
}
}
}
}
functionopenscriphtml()
{
if(navigator.appName!="MicrosoftInternetExplorer")
alert("此功能Netscape用户不能使用!")
else
{newwin=window.open('htmledit/editor.html','','width=544,height=294');
newwin.focus();
}
}
functionrunEx(){
//alert('请注意,按下确定将生成页面,按下后请稍后....');
varwinEx=window.open("","winEx","width=600,height=400,status=yes,menubar=yes,scrollbars=yes,resizable=yes");
winEx.document.open("text/html","replace");
winEx.document.write(unescape(event.srcElement.parentElement.children[2].value));
winEx.document.close();
}
functionopenScript(url,width,height){
varWin=window.open(url,"openScript",'width='+width+',height='
+height+',resizable=1,scrollbars=yes,menubar=yes,status=yes');
}
</SCRIPT>
<SCRIPTlanguage=Javascript>
<!--hide
functioninsertsmilie(smilieface){
document.frmAnnounce.body.value+=smilieface;
}
//-->
</SCRIPT>
<METAhttp-equiv=Content-Typecontent="text/html;charset=gb2312"><LINK
href="Asp_net中服务端控件事件是如何触发的http--www_booro_com_files/style.css"rel=stylesheet>
<METAcontent="MSHTML6.00.3790.0"name=GENERATOR></HEAD>
<BODYonmouseover="self.status='DOTNET新网-DOTNET的技术荟萃本站';return
true"
leftMargin=25topMargin=0>
<TABLE
style="BORDER-TOP-WIDTH:1px;BORDER-RIGHT:#2b55751pxsolid;BORDER-LEFT:
#2b55751pxsolid;BORDER-BOTTOM:#2b55751pxsolid;BORDER-COLLAPSE:
collapse"
height=25cellSpacing=1cellPadding=0width="100%"border=0>
<TBODY>
<TR>
<TDwidth="100%"bgColor=#f4f8fbheight=23> <IMG
src="Asp_net中服务端控件事件是如何触发的http--www_booro_com_files/slogo_geci.gif"
border=0> Asp.net中服务端控件事件是如何触发的 </TD></TR></TBODY></TABLE>
<TABLE
style="BORDER-TOP-WIDTH:1px;BORDER-RIGHT:#2b55751pxsolid;BORDER-LEFT:
#2b55751pxsolid;BORDER-BOTTOM:#2b55751pxsolid;BORDER-COLLAPSE:collapse"
height=52cellSpacing=1cellPadding=0width="100%"border=0>
<TBODY>
<TR>
<TDwidth="42%"
height=17>
<FONTcolor=#ff0000>你是第242位浏览该文章的人</FONT></TD>
<TDwidth="63%"height=17><IMG
src="Asp_net中服务端控件事件是如何触发的http--www_booro_com_files/04.gif"
border=0>chnking <IMG
src="Asp_net中服务端控件事件是如何触发的http--www_booro_com_files/05.gif"border=0>csdn
<IMGsrc="Asp_net中服务端控件事件是如何触发的http--www_booro_com_files/date.gif"
border=0>2003-8-28</TD></TR>
<TR>
<TDvAlign=topwidth="100%"colSpan=2height=35>
<DIValign=center>
<CENTER>
<TABLE
style="BORDER-TOP:#2b55751pxsolid;BORDER-LEFT-WIDTH:1px;BORDER-BOTTOM-WIDTH:
1px;BORDER-COLLAPSE:collapse;BORDER-RIGHT-WIDTH:1px"
cellSpacing=3cellPadding=0width="98%"border=0>
<TBODY>
<TR>
<TDwidth="100%">Asp.net中在客户端触发服务端事件分为两种情况:
<P></P>
<P>一.WebControls中的Button
和HtmlControls中的Type为submit的HtmlInputButton</P>
<P>这两种按钮最终到客户端的表现形式为:<inputname="Submit1"id="Submit1"
type="submit"
value=”Submit”>,这是Form表单的提交按钮,点击以后会作为参数发送到服务端,参数是这样的:
控件的name属性=控件的value值,对应上面的例子就是:Submit1=Submit。
服务端会根据接收到的控件的name属性的这个key来得知是这个按钮被点击了,从而在服务端触发这个按钮的点击事件。</P>
<P>二.HtmlControls中的Type为button的HtmlInputButton
和其它所有的控件事件,比如LinkButton点击,TextBox的Change事件等等:</P>
<P>这些事件在客户端产生后会经过一个统一的机制发送到服务端。</P>
<P>1.首先asp.net页框架会使用两个Hidden域来存放表示是哪个控件触发的事件,以及事件的参数:</P>
<P><!—表示触发事件的控件,一般是这个控件的name--></P>
<P><inputtype="hidden"name="__EVENTTARGET"value=""/></P>
<P><!—表示触发事件的参数,一般是当某个控件有两个以上的事件时,用来区别是哪个事件--></P>
<P><inputtype="hidden"name="__EVENTARGUMENT"value=""/></P>
<P>2.服务端会生成一个jscript的方法来处理所有这些事件的发送,这段代码是:</P>
<P><scriptlanguage="javascript"></P>
<P><!--</P>
<P>function__doPostBack(eventTarget,eventArgument){</P>
<P>vartheform=document.WebForm2;</P>
<P>theform.__EVENTTARGET.value=eventTarget;</P>
<P>theform.__EVENTARGUMENT.value=eventArgument;</P>
<P>theform.submit();</P>
<P>}</P>
<P>//--></P>
<P></script></P>
<P>3.每个会引发服务端事件的控件都会在响应的客户端事件中调用上面的代码:</P>
<P>比如,HtmlControls中的Type为button的HtmlInputButton的点击事件</P>
<P><!—客户端的点击事件调用__doPostBack,eventTarget
参数为'Button2',表示是name为'Button2’控件触发的事件,eventArgument
为空,表示这个Type为button的HtmlInputButton只有一个客户端触发的服务端事件--></P>
<P><inputlanguage="javascript"
onclick="__doPostBack('Button2','')"name="Button2"id="Button2"
type="button"value="Button"/></P>
<P></P>
<P>又比如,TextBox控件的Change事件</P>
<P><!—客户端的onchange事件调用__doPostBack,eventTarget
参数为’TextBox1’,表示是name为’TextBox1’控件触发的事件,而TextBox控件只有一个客户端触发的服务端事件TextChanged,故服务器就会去触发这个TextBox的TextChanged事件-></P>
<P><inputname="TextBox1"type="text"id="TextBox1"
onchange="__doPostBack('TextBox1','')"language="javascript"
/></P>
<P>4.客户端触发事件后调用__doPostBack方法,将表示触发的控件源的eventTarget
和事件参数eventArgument分别付给两个隐藏域__EVENTTARGET和__EVENTARGUMENT,然后提交Form,在服务端根据__EVENTTARGET和__EVENTARGUMENT来判断是哪个控件的什么事件触发了。<BR></P></TD></TR></TBODY></TABLE></CENTER></DIV><BR><BR>
上篇文章:<A
href="http://www.booro.com/teach/list.asp?id=535">用ASP.NET开发Web服务的五则技巧</A>
<BR> 下篇文章:<A
href="http://www.booro.com/teach/list.asp?id=537">从现存的应用来构建Web
Services</A></TD></TR></TBODY></TABLE>
<TABLE
style="BORDER-TOP-WIDTH:1px;BORDER-RIGHT:#2b55751pxsolid;BORDER-LEFT:
#2b55751pxsolid;BORDER-BOTTOM:#2b55751pxsolid;BORDER-COLLAPSE:collapse"
height=19cellSpacing=0cellPadding=0width="100%"border=0>
<TBODY>
<TR>
<TDwidth="100%"bgColor=#f4f8fbheight=1>
<Palign=right> <A
href="http://www.booro.com/teach/list.asp?id=536#"><IMG
src="Asp_net中服务端控件事件是如何触发的http--www_booro_com_files/01.gif"
border=0></A> <A
href="http://www.booro.com/teach/printpage.asp?id=536"><IMG
src="Asp_net中服务端控件事件是如何触发的http--www_booro_com_files/02.gif"border=0></A>
<Ahref="javascript:self.close()"><IMG
src="Asp_net中服务端控件事件是如何触发的http--www_booro_com_files/03.gif"
border=0></A> </P></TD></TR></TBODY></TABLE></BODY></HTML>