对着月亮唱歌的幸福生活

即便是莲藕内心真空之所,也有根根柔丝穿过。
  博客园  :: 首页  :: 联系 :: 管理

Asp.Net2.0 Client端Script的增强与改良

Posted on 2008-10-15 10:59  对月而歌  阅读(369)  评论(0)    收藏  举报

第一部分 Client端Click事件   

Asp.Net2.0针对Button提供了Client端的Click事件,而既然是Client端的事件自然是调用Client端的Script(如JavaScript),较之于Attributes属性添加额外的属性方便多了.

    由于ASP.NET是Server端的技术,要处理任何消息必须回传回Server端执行,但往往时效性,会略逊Client段的JavaScript一筹,所以许多程序员喜欢搭配JavaScript来使用,而ASP.NET2.0为体贴程序员添加了OnClientClick属性,因此只要在该属性中添家一些简单的JavaScript程序,既可以不必额外添加<Script>区段的JavaScript声明.

例一 Client端的Confirm确认对话框

    本范例利用ASP.NET2.0的OnClientClick属性,Client端的JavaCsriptConfirm对话框

STEP1 :建立相关Layout,控件ID及属性参考范例程序,ClientConfirm.aspx

STEP2 :设置OnClientClick事件程序

    本范例的重点是在ASP.NET Button服务器控件的OnClientClick属性中,将对性的JavaScript程序添加到此属性中,当Button被按下时,首先会先引发Clent端的JavaScript时间,待Client端JavaScript完成后,接着才会视情况要不要Postbacj回服务器一发服务器事件,Html程序如下:

<asp:Button ID="btnClientClick" runat = "server" OnClientClick="return confirm('确定传送?')" Text = "引发Client端Client" BackColor="#C0C0EF" OnClick = "btnClientClick_Click">

STEP3 :建立服务器按纽事件

    服务器只是单纯的将用户输入的姓名显示出来,ClientConfirm.aspx.cs程序如下

protected void bunClientClick_Click(object sender,EventArgs e)
{
  //显示输入的姓名
  txtMsg.Text = "您的姓名是:"+txtUserName.Text;
}
  完成后可以运行看看,在Comfirm对话框中点击[确定]按钮会Postback回服务器端执行程序将名字显示出来,反之若点击[取消]按钮则在Client端就会被取消,根本不会显示名字,这是最大的差异点. 

 例二 在Server端的Button引发Client端Click事件(打开网页)

  本例和上一范例亦是利用OnClientClick来执行JavaScript来打开另一个新窗口显现网站,请参考ClientOpenWebSite.aspx程序,步骤说明如下;

STEP1 :建立相关控件及Layout,控件ID及属性请参考范例程序

Code

 

STEP2 :添加相关JavaScript
   请在HTML标签中<head></head>中添加相关的JavaScript开启相关的JavaScript开启新网站的窗口程序:

JavaScript

STEP3 :添加服务器程序
  请在ClientOpenWebSite.aspx.cs中添加下列程序以开启新网页窗口

Code

第二部分 Client端Script的动态注册

  ClientScriptManager是ASP.NET2.0之中用来管理Client端Script(如JavaScript或Jscript)的新类,通过ClietnScriptManager可以用来动态注册Web应用程序所需的JavaScript程序,而不一定得硬生生的将Script写死到HTML之中.
  要使用ClientScriptManager是通过Page.ClientScript属性,Page.ClientScript属性可以取得一个ClietnScriptManager对象做参照,以便能够对JavaScript进行管理、注册、及添加新的JavaScript动态添加JavaScript方式有如下四种:

 

方式

说明

RegusterClientScriptBlock

JavaScript区块添加页面顶端。您可以字符串形式创建这些代码,然后将它传递给添加网页的方法。您可以使用这种方法任何JavaScript插入网页,请注意,在完成所有项目之前JavaScript可能会呈现在网页,因此您可能无法从JavaScript引用网页上所有项目

RegisterClientScriptInclude

这种方法类似RegisterClientScriptBlock方法,但是会添加引用外部.js文件的JavaScript区块。在以动态方式添加任何其他JavaScript之前就会添加这个包含文件,因此您可能无法引用网页上的某些项目

RegisterStartupScript

JavaScript区块添加当网页完成加载,但是在引发网页的onload时间之前,酒会执行的网页,这个JavaScript通常不会创建为时间处理例程或函数。它通常只包含想要执行一次的语句

RegisterOnSubmitStatement

添加执行以响应网页onsubmit时间的JavaScript.在送出网页之前就会执行Javascript,并且让您有机会取消提交操作

   然而在动态注册JavaScript前,有必要先检查同样名称的JavaScript是否已经被注册,其对应的方法如下

  • RegusterClientScriptBlock--->IsClientScriptBlockRegistered()方法
  • RegisterClientScriptInclude--->IsClientScriptIncludeRegistere()方法
  • RegisterStartupScript--->IsStartupScriptRegistered()方法
  • RegisterOnSubmitStatement--->IsOnSubmitStatementRegistered()方法

例一 使用RegisterClientScriptOnclude动态注册.js事件

  一般在设计网站时多多少少都会使用到JavaScript,然而网页程序员可能会将经常使用到的JavaScript独立出来成为一个.js文件,而本范例将示范如何注册已经创建好的JavaScript文件到ASP.NET的Page之中,如此可以有比较大的弹性,请参考PageRegisterClientScriptInclude.aspx程序,步骤说明如下。
STEP1 :准备JavaScript文件
    在Script目录下有一Info.js的文件,内容如下
function showName(username)
{alert('您的姓名是:'+username);}
其作用是显示Client端输入的姓名
STEP2 :网页及控件配置
    在网页中要添家的是Client端的控件,在用户输入姓名之后通过动态注册的JavaScript文件Info.js中的function shouwName将TextBox显示出来,其HTML程序片段如下:

PageRegisterClientScriptInclude    请输入姓名:
    <input id = "txtUserName" type = "text" />
    <input id="btnSubmit" type="button" value="确定" onclick="showName(txtUserName.value)"/>

STEP3 :动态注册JavaScript文件
    最后一道程序是将Info.js的JavaScript文件动态注册到页面,起程序如下:

Code

    执行后查看源文件,会发现标签里面有<script src="./Script/Info.js" type = "text/javascript"></script>

例二   使用RegisterClientScriptBlock动态注册JavaScript指令区块
  本例虽是修改上面一个范例RegisterClientScriptInclude.aspx产生的但俩这原理大致相同,而通过RegisterClientScriptBlock方法可以动态建构JavaScript指令,不象上一个范例所注册的是已存在的JavaScript文件Info.js,请参考RegisterClientScriptBlock.aspx:

Code

例三  使用RegisterStartUpScript动态注册JavaScript指令
     RegisterUpScript通常只包含"执行一次"的JavaScript,例如用户进入网页显示一个欢迎光临的消息

Code

  
参考资料
悉江华《圣殿祭祀的ASP.NET2.0开发祥解-使用C#》电子工业出版社 2006