ASP.net中向客户端注册脚本的几种方式

在ASP.net中向客户端注册脚本的方式有以下几种:

1.HttpContext.Current.Response.Write

用法示例:

string jsBlock = "<script type=text/javascript>alert('Response.Write');</script>";
HttpContext.Current.Response.Write(jsBlock);

          通过Response.Write方式注册脚本应当是使用最多的,在很多的入门书籍里都是这么用的,但这种方式最大的缺点就是它输出的脚本在整个页面的最顶端,在HTML标签之外,这样会破坏HTML的结构,所以不推荐使用这种方式。如下图:

ASP.net中向客户端注册脚本的几种方式_第1张图片

 

2.Page.ClientScript.RegisterClientScriptBlock

3.Page.ClientScript.RegisterStartupScript

这两个放在一起讲,这两个有很多的相似之处,也有一些差异。

用法示例:

string jsBlock1 = "<script type=text/javascript>alert('ClientScript.RegisterClientScriptBlock');</script>";
string jsBlock2 = "<script type=text/javascript>alert('ClientScript.RegisterStartupScript');</script>";

ClientScriptManager cs = Page.ClientScript;
if (!cs.IsClientScriptBlockRegistered( "Test1"))
{
    Page.ClientScript.RegisterClientScriptBlock( this.Page.GetType(), "Test1", jsBlock1);
}

if (!cs.IsStartupScriptRegistered( "Test2"))
{
    Page.ClientScript.RegisterStartupScript( this.Page.GetType(), "Test2", jsBlock2);
}

          为了防止在页面中重复加入脚本,在注册脚本时,这两种方式引入了Key, 具有相同的键和类型的脚本被视为重复脚本。 只有使用给定的类型和键对的脚本才能使用该页面进行注册。 尝试注册一个已经注册的脚本不会创建重复的脚本。

         通过调用 IsClientScriptBlockRegisteredIsStartupScriptRegistered 方法可以确定具有给定键和类型对的客户端脚本是否已经注册,这样能够避免不必要地尝试添加脚本。

         这两个方法都各有一个重载方法 RegisterClientScriptBlockRegisterStartupScript  在此重载中,使用 addScriptTags 参数指示 script 参数中提供的脚本是否包装在 <script> 元素块中。 将 addScriptTags 设置为 true 指示脚本标记将自动在脚本外添加<script type="text/javascript"></script>标签。

        另外,这两个函数的连续使用次数确保在9次以内,否则写入的Script语句的顺序会不同于你预想的,因为关乎存储那些Script们的容器,当超过9个后,从 ListDictionary 转为Hashtable,一Hash了就顺序不一定相同了。如果脚本块的顺序十分重要,可以使用 StringBuilder 对象将脚本收集到单个字符串中,然后在单个客户端脚本块中注册所有这些脚本。

两者的差异:

ASP.net中向客户端注册脚本的几种方式_第2张图片

          从上图可以看出RegisterClientScriptBlock输出的脚本在asp.net自带的脚本和一些隐藏域之间,处于form内的最前部,RegisterStartupScript输出的脚本则处于</form>之前,如果注册的脚本与放在文档中的位置没有关系,那两者没有差别。如果脚本需要与页面对象(doucument对象)进行交互等,那么它在文档中的先后位置可能就比较重要,这个时候就建议使用 RegisterStartupScript, 反之如果要想客户端脚本尽可能早的执行,则可以使用RegisterClientScriptBlock。

 

4. Page.ClientScript.RegisterClientScriptInclude

          很多时候我们都会把JavaScript放在单独的js文件中,这是很好的方式,很方便把对JavaScript的修改应用于整个程序。使用RegisterClientScriptInclude方法可以在ASP.NET页面上注册脚本文件。

用法示例:

Page.ClientScript.RegisterClientScriptInclude( "common", "/common.js");

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