ASP.NET2.0中ClientScriptManager的用法(使用ASP.NET 2.0 AJAX 弹出对话框)

可以使用:RegisterClientScriptBlock和RegisterStartupScript

1) ScriptManager.RegisterClientScriptBlock(UpdatePanel1, this.GetType(), "click", "alert("提示信息")", true);

 

2)ScriptManager.RegisterStartupScript(UpdatePanel1, UpdatePanel1.GetType(), "", "alert('提示:产

品添加成功!');if(confirm('是否继续添加?取消转到产品管理页')){alert('本页面继续添加')}else

{window.open('productManage.aspx','_self');}", true);

 

RegisterClientScriptBlock和RegisterStartupScript 的区别:

 

RegisterClientScriptBlock输出后的位置会在<form>的下一行.(在asp.net自带的脚本和一些隐藏域之下).

RegisterStartupScript输出后的位置会在</form>的上一行.

RegisterClientScriptBlock的原型与RegisterStartupScript相同,两个函数不同在于将其 包含的脚本代码写入到HTML文件的不同位置.RegisterClientScriptBlock在 Page 对象的 元素的开始标记后立即发出客户端脚本,RegisterStartupScript则是在Page 对象的 元素的结束标记之前发出该脚本。如果你的脚本有与页面对象(doucument对象)进行交互的语句,则推荐使用 RegisterStartupScript,反之如果要想客户端脚本尽可能早的执行,则可以使用RegisterClientScriptBlock或 Response.Write。

RegisterClientScriptBlock一般返回的是客户端函数的包装,而RegisterStartupScript返回得函数在 document装载完成后会执行,类似于我们平时所说的body onload="f()"里面的函数;这两个方法在客户端呈现的代码位置不同,RegisterClientScriptBlock在<form runat=server>之后,而RegisterStartupScript在</form>之前。

 

ASP.NET2.0中ClientScriptManager的用法

摘自:《道不远人:深入解析ASP.NET 2.0控件开发》

在ASP.NET中管理脚本,正是System.Web.UI.ClientScriptManager类的特长。 ClientScriptManager类通过Page.ClientScript暴露。在控件内部,可以通过 this.Page.ClientScript得到ClientScriptManager实例。

ClientScriptManager类提供了大量生成客户端代码的方法:

— RegisterArrayDeclaration——添加一个JavaScript数组到页面中。

— RegisterClientScriptBlock——在页面的起始<form>标签后添加JavaScript脚本。

— RegisterStartupScript——在页面的结束<form>标签前添加JavaScript脚本。

— RegisterClientScriptInclude——在页面的起始服务端<form>标签后添加外部JavaScript文件引用。

— RegisterClientScriptResource——添加已编译到程序集中的JavaScript资源文件的链接到页面中。

— RegisterExpandoAttribute——生成为页面中的元素附加扩展属性的脚本(由于Javascript的动态特性,所以可以为对象随意附加属性)。

— RegisterHiddenField——在页面的起始服务端<form>标签后添加一个隐藏表单域。

— RegisterOnSubmitStatement——用于添加在页面回传服务端前执行的JavaScript脚本。

— GetPostBackClientHyperLink——生成类似于javascript:__doPostBack(‘element’,’args’)的脚本,可用于完成回传服务端的链接。

— GetPostBackEventReference——以GetPostBackClientHyperLink功能类似,只是没有javascript:前缀。

— GetWebResourceUrl——生成编译到程序集中的资源文件的链接。

— RegisterForEventValidation——生成事件验证代码,事件验证指事件回传后验证参数是否来源于最初呈现这些事件的服务端控件。需要在Config文件或页面指定中指定启用EnableEventValidation。

此外,ClientScriptManager类还有一大堆IsXXXResistered()方法,用来判断某个客户端代码是不是已经注册到了页面中。

ClientScriptManager的编程接口相当丰富,我们将在后面使用它们。

注:Page类也提供了有一些注册脚本的方法,比如:Page.RegisterClientScriptBlock(),这些方法的功能与ClientScriptManager中的同名方法类似,并且在ASP.NET 2.0中已不推荐使用。

要往页 面中呈现脚本,我们可以选择ClientScriptManager.RegisterClientScriptBlock()方法或 ClientScriptManager.RegisterStartupScript()方法。这两个方法的参数和功能都差不多,不同之处在于它们将代 码呈现在页面的不同的地方,前一个方法将客户端代码呈现在页面表单的最前面,也就是这些代码位于所有页面元素之前,这使得脚本最先被浏览器解析;后一个方 法将客户端代码呈现在页面表单的最末端,页面解析这些脚本时,页面上的各种元素已经完成解析,这就使得这些脚本可以马上操作页面上的元素。

所以我们常用前一个方法呈现一些不会马上执行的代码,比如声明某个按钮的Click事件处理程序,而用后一个方法呈现页面加载完成后马上执行的代码,比如定义某个变量的初始值,对页面元素进行某种操作。

比如前面的HelloWorld例子,可以改写成这样:

protected void Page_Load( object sender, EventArgs e)
{
    
if (!Page.ClientScript.IsClientScriptBlockRegistered( "HelloWorldDeclaration"))
    
{
         Page.ClientScript.RegisterClientScriptBlock(typeof(string),"HelloWorldDeclaration", "function sayHello(){alert('Hello world!');}", true);

     }


    
if (!Page.ClientScript.IsStartupScriptRegistered("HelloWorldExecution"))
    
{
         Page.ClientScript.RegisterStartupScript(typeof(string),"HelloWorldExecution", "sayHello();", true);

     }

}


在这段代码中,我们分别使用RegisterClientScriptBlock()方法声明sayHello()方法,用 RegisterStartupScript()方法呈现执行sayHello()方法的代码,这两个方法的最后一个参数设为true,使得这两个方法将 自动生成<script>标签对。在使用这两个方法的过程中,还使用配套的IsXXXRegistered()方法对代码是否已经注册过进行 判断。在这个页面中使用这些判断并没有太大的意义,但在控件中却很有必要性,因为你不知道用户会放多少个同样的控件到页面中,如果每个控件实例都呈现一遍 相同的脚本,则会在页面中产生大量冗余代码。

你可能感兴趣的:(asp.net)