仓酷云
标题:
ASP.NET网站制作之ASP.NET服务器控件PleaseWaitButton
[打印本页]
作者:
第二个灵魂
时间:
2015-1-16 22:45
标题:
ASP.NET网站制作之ASP.NET服务器控件PleaseWaitButton
学习asp.net两个月有余了,除了对html、web控件比较熟悉(应该是说都能理解和接受)之外,竟不知道自己还会什么。看了两本书:《精通asp.net网络编程》(人民邮电出版社)、《asp.net实用案例教程》(清华大学出版社)。asp.net|服务器|控件Introduction
在webapplication的表单提交过程当中显现“pleasewait”信息大概是gif动绘图片一般是很有效的,出格是提交历程对照久的情形。我比来开辟了一个查询拜访提交程序,在程序里外部用户经由过程一个网页上传excel电子表格。程序将上传的电子表格数据拔出到数据库中。这个历程只必要几秒钟,但即使是几秒钟,在网页是看来倒是十分分明的守候历程。在程序测试的时分,一些用户反复地址击上传按钮。因而,供应一个视觉的信息来告知人们上传正在举行中是很有效的。并同时把上传按钮一同埋没失落,以避免屡次点击。这里先容的控件是Button控件的子类,它演示了怎样把客户端javascript代码封装在asp.net服务器控件中来供应便当的功效。
固然表面已有良多javascript的例子来完成这件事变,但当我试图把这些功效封装到asp.net控件中时我发明了一些成绩。我最入手下手实验经由过程javascript的onclick句柄来使button有效,并用别的的文本代替。但我发明很辣手,如许会妨害到asp.net服务器真个click事务的功效。而终极行得通的,而且对分歧扫瞄器也有很好撑持的办法是,让button在div标志中出现。div能够埋没而且无妨碍asp.net的click事务。
Usingthecontrol
作为一般的button控件的派生,PleaseWaitButton的功效与它基础一样。它经由过程三个附加的属性来办理当按钮被点击后"pleaseWait"信息或图片的显现。
PleaseWaitText
这是显现的客户端文本信息,假如存在,当按钮被点击它将代替按钮。
PleaseWaitImage
这是显现的图象文件(好比gif动绘图像),假如存在,当按钮被点击它将代替按钮。这个属性将酿成"
,_pleaseWaitImage,_pleaseWaitText)
:String.Empty);
//establishthelayoutbasedonPleaseWaitType
switch(_pleaseWaitType)
{
casePleaseWaitTypeEnum.TextThenImage:
sMessage=sText+sImage;
break;
casePleaseWaitTypeEnum.ImageThenText:
sMessage=sImage+sText;
break;
casePleaseWaitTypeEnum.TextOnly:
sMessage=sText;
break;
casePleaseWaitTypeEnum.ImageOnly:
sMessage=sImage;
break;
}
//returnthefinalcodechunk
stringsCode=string.Format(
"PleaseWait(pleaseWaitButtonDiv_{0},
pleaseWaitButtonDiv2_{1},{2});"
,this.ClientID,this.ClientID,sMessage);
sCode=sCode.Replace(""",""");
returnsCode;
}
假如指定了一个PleaseWaitImage,就必需包括分外的一段Javascript代码来关照客户端预载该图象。这段剧本的注册应当呈现在重写的OnPreRender办法中。注册的键是图象的称号;假如多个按钮都利用统一图象,预载剧本只必要实行一次。这里利用了一个正则表达式来创立Javascript图象变量,以包管特别字字符(好比文件路径中的斜线)转化成下划线。
protectedoverridevoidOnPreRender(EventArgse)
{
base.OnPreRender(e);
//Ifwereusinganimage,registersomejavascript
//forclient-sideimagepreloading
if(_pleaseWaitImage!=String.Empty
&&_pleaseWaitType!=PleaseWaitTypeEnum.TextOnly)
RegisterJavascriptPreloadImage(_pleaseWaitImage);
}
privatevoidRegisterJavascriptPreloadImage(stringsImage)
{
Regexrex=newRegex("[^a-zA-Z0-9]");
stringsImgName="img_"+rex.Replace(sImage,"_");
StringBuildersb=newStringBuilder();
sb.Append("<scriptlanguage=JavaScript>");
sb.Append("if(document.images){");
sb.AppendFormat("{0}=newImage();",sImgName);
sb.AppendFormat("{0}.src="{1}";",sImgName,sImage);
sb.Append("}");
sb.Append("</script>");
this.Page.RegisterClientScriptBlock(sImgName+"_PreloadScript",
sb.ToString());
}
Client-sidefunctions
嵌进的文本文件javascript.txt包括了埋没按钮的<div>和显现"pleasewait"信息或图象的客户端代码。这些代码在重写的OnInit()办法中挪用的公有办法RegisterJavascriptFromResource()加载。这个办法挪用泛型办法GetEmbeddedTextFile(),在这个泛型办法中把文件做为源加载而把内容前往成字符串。
protectedoverridevoidOnInit(EventArgse)
{
base.OnInit(e);
//theclient-sidejavascriptcodeiskept
//inanembeddedresource;loadthescript
//andregisteritwiththepage.
RegisterJavascriptFromResource();
}
privatevoidRegisterJavascriptFromResource()
{
//loadtheembeddedtextfile"javascript.txt"
//andregisteritscontentsasclient-sidescript
stringsScript=GetEmbeddedTextFile("javascript.txt");
this.Page.RegisterClientScriptBlock("PleaseWaitButtonScript",sScript);
}
privatestringGetEmbeddedTextFile(stringsTextFile)
{
//genericfunctionforretrievingthecontents
//ofanembeddedtextfileresourceasastring
//wellgettheexecutingassembly,andderive
//thenamespaceusingthefirsttypeintheassembly
Assemblya=Assembly.GetExecutingAssembly();
StringsNamespace=a.GetTypes()[0].Namespace;
//withtheassemblyandnamespace,wellgetthe
//embeddedresourceasastream
Streams=a.GetManifestResourceStream(
string.Format("{0}.{1}",sNamespace,sTextFile)
);
//readthecontentsofthestreamintoastring
StreamReadersr=newStreamReader(s);
StringsContents=sr.ReadToEnd();
sr.Close();
s.Close();
returnsContents;
}
javascript.txt嵌进资本包括了按钮在Javascript的onclick句柄中实行的客户端办法PleaseWait()。这段代码也挪用了一个客户端办法HideDiv()以埋没按钮的容器<div>,然后经由过程设置innerHTML属性把信息或图象组装进之前空的<div>标志中。帮助函数GetDiv()则是经由过程反省document.getElementById,document.all,和document.layers用id前往一个<div>工具,包管了分歧扫瞄器的兼容性。上面是javascript.txt的全体代码:
<scriptlanguage="JavaScript">
functionGetDiv(sDiv)
{
vardiv;
if(document.getElementById)
div=document.getElementById(sDiv);
elseif(document.all)
div=eval("window."+sDiv);
elseif(document.layers)
div=document.layers[sDiv];
else
div=null;
returndiv;
}
functionHideDiv(sDiv)
{
d=GetDiv(sDiv);
if(d)
{
if(document.layers)d.visibility="hide";
elsed.style.visibility="hidden";
}
}
functionPleaseWait(sDivButton,sDivMessage,sInnerHtml)
{
HideDiv(sDivButton);
vard=GetDiv(sDivMessage);
if(d)d.innerHTML=sInnerHtml;
}
</script>
原文链接:http://www.codeproject.com/aspnet/PleaseWaitButton.asp
因为二次编译器太复杂,那么建议只是在安装程序的时候编译一次,而不类似java那样运行就编译。并且我觉得,一次痛苦,总比多次低效率要舒服多了。
作者:
透明
时间:
2015-1-19 18:14
市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。
作者:
飘灵儿
时间:
2015-1-24 15:24
ASP.NET:ASP.net是Microsoft.net的一部分,作为战略产品,不仅仅是ActiveServerPage(ASP)的下一个版本;它还提供了一个统一的Web开发模型,其中包括开发人员生成企业级Web应用程序所需的各种服务。ASP.NET的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。
作者:
蒙在股里
时间:
2015-2-1 19:15
HTML:当然这是网页最基本的语言,每一个服务器语言都需要它的支持,要学习,这个肯定是开始,不说了.
作者:
若天明
时间:
2015-2-7 14:08
在调试JSP代码时,如果程序出错,JSP服务器会返回出错信息,并在浏览器中显示。这时,由于JSP是先被转换成Servlet后再运行的,所以,浏览器中所显示的代码出错的行数并不是JSP源代码的行数。
作者:
老尸
时间:
2015-3-6 23:05
Asp.net脚本的出现,为ASP空间带来了更高的稳定性,同时也为程序员建站提供更高环境!
作者:
小魔女
时间:
2015-3-13 22:09
asp.net空间的支持有:ASP.NET1.1/虚拟目录/MicrosoftFrontPage2000扩展/CDONTS,同时他的网站上也提供了Asp.net的使用详解和程序源代码,相信对使用ASP.NET编程的程序员来说会非常有用哦!
作者:
山那边是海
时间:
2015-3-20 20:39
ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp)。
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2