首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

9.1.5  支持客户端脚本

ASP.NET提供了其他几个工具来支持客户端处理。下面就介绍这些工具。

1. 添加数组

服务器端代码可以访问服务器上的数据库,但在浏览器上执行的代码不能。这个问题的通常解决方法是在服务器端代码中提取数据库中的数据,把它们嵌入到客户端代码的一个静态数组中。RegisterArrayDeclaration方法不仅可以把需要的数组添加到页面上,还可以标记已添加的数组。这样,共享数据的控件(例如一组有效的顾客码)可以避免多次添加数据。

RegisterArrayDeclaration接受两个参数。

●       在客户端代码中包含数组的变量名

●       用于初始化数组的字符串

在下面的Visual Basic 2005示例中,创建了一个数组CustStatus,它包含四项:Rejected、Standard、Gold和Platinum。

Dim csm As System.Web.UI.ClientScriptManager

csm = Me.Page.ClientScript

csm.RegisterArrayDeclaration("CustStatus", _

     "'Rejected', 'Standard', 'Gold', 'Platinum'")

C#的对应代码如下所示。

System.Web.UI.ClientScriptManager csm;

csm = this.Page.ClientScript;

csm.RegisterArrayDeclaration("CustStatus",

         "'Rejected', 'Standard', 'Gold', 'Platinum'");

得到的JavaScript代码如下所示。

<script type="text/javascript">

<!--

   var CustStatus =  new Array("Rejected", "Standard", "Gold", "Platinum");

// -->

</script>

2. 客户端包含的内容

我们常常不在页面中包含所有的客户端代码,而不是把客户端代码放在一个单独的文件中,使用带src特性的<script>标记引用该文件。RegisterClientScriptInclude方法可以添加这类脚本标记,以引用脚本文件。

下面的Visual Basic 2005示例添加了对代码文件code.js的引用。

csm.RegisterClientScriptInclude("PHVBlock", "code.js")

C#的对应代码如下所示。

csm.RegisterClientScriptInclude("PHVBlock", "code.js");

得到的<script>元素如下所示。

<script src="code.js" type="text/javascript"></script>

提示:

使用包含文件,提供了一种实现策略“只为客户机提供它们支持的客户端代码”的方式。我们常常有一组只能在Netscape Navigator的最新版本上工作的客户端代码,它们不能不加任何修改地在早期版本上工作。为了处理这种区别,可以为每个要支持的浏览器编写一个代码版本,把这些版本放在不同的文件中。在运行时,用BrowserCapabilities对象检查浏览器的类型,用RegisterClientScriptInclude方法添加对脚本文件的引用,该脚本文件包含了可在该浏览器上工作的代码。

ASP.NET 2.0的规定是把客户端资源(例如脚本文件)放在Web服务器根目录下的一个虚拟目录aspnet_client下,这个虚拟目录在安装ASP.NET 2.0时创建。客户端资源应安装在:

●       aspnet_client目录下

●       以应用程序命名的子文件夹下

●       根据应用程序的版本号命名的子文件夹下

例如,客户端代码文件code.js用于应用程序MyApplication的1.0.0.0版本,应放在文件夹/aspnet_client/MyApplication/1_0_0_0/下。

如果不把资源放在单独的文件中,还可以把代码文件直接放在应用程序的程序集中。要在应用程序的程序集中嵌入文件,只需把该文件添加到项目中,然后在文件的属性列表中,把该文件的Build Action设置为Embedded Resource。

实用程序WebResource.axd与.NET Framework一起发布,在用指定资源的查询字符串请求页面时,该实用程序可以检索出嵌入的资源。RegisterClientScriptResource方法可以生成一个script标记,其src特性引用WebResource实用程序,并检索出资源。下面的Visual Basic 2005示例检索出了资源code.js。

csm.RegisterClientScriptResource(Me.GetType, "code.js")

C#的对应代码如下所示。

csm.RegisterClientScriptResource(this.GetType(), "code.js");

得到的页面包含下述标记。

<script src="/WebPartsHostVB/WebResource.axd?d=

WylyhFDzry8iRJrQJB9A0hZkD_GD3HHX8pJs

r0kUntA1&amp;t=632482109977226208" type="text/javascript"></script>

还可以使生成资源的URL,具体方法是:使用GetWebResourceURL方法,给它传送用于创建该资源的参数。这样,就可以把该URL嵌入到其他特性中,而不是RegisterClientscript Resource生成的script标记中。例如,下面的Visual Basic 2005代码把URL添加到控件的一个定制特性中,以显示控件的URL。

Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)

  writer.AddAttribute("type", "text")

  writer.AddAttribute("id", "txtName;")

  writer.AddAttribute("MySrc", Me.Page.ClientScript. _

                     GetWebResourceURL(Me.GetType,"code.js")) 

writer.RenderBeginTag("input")

  writer.RenderEndTag()

End Sub

C#的对应代码如下所示。

protected override void Render(System.Web.UI.HtmlTextWriter writer)

{  writer.AddAttribute("type", "text");

  writer.AddAttribute("id", "txtName;");

  writer.AddAttribute("MySrc", this.Page.ClientScript.

                GetWebResourceURL(this.GetType, "code.js")); 

writer.RenderBeginTag("input");

  writer.RenderEndTag();

}

3. Expando特性

如上一个例子所述,可以自己定义要添加到标记中的特性,称为Expando特性。Expando特性实现为一组客户端代码。在浏览器发现客户机上有特性时,就会调用它。ClientScriptManager的RegisterExpandoAttribute方法支持把客户端代码添加到expando特性中。下面的Visual Basic 2005代码创建了一个用于<input>标记的特性EncryptionMethod,并将该特性的初始值设置为SHA1。

csm.RegisterExpandoAttribute("input", "EncryptionMethod", "SHA1")

C#的对应代码如下所示。

csm.RegisterExpandoAttribute("input", "EncryptionMethod", "SHA1");

得到的JavaScript代码如下所示。

<script type="text/javascript">

<!--

var input = document.all ? document.all["input"] :

                                    document.getElementById("input");

input.EncryptionMethod = "SHA1";

// -->

</script>

提示:

这段代码定义了EncryptionMethod特性,但仍需要在页面上给标记添加EncryptionMethod特性。使用控件的Attributes集合,或第3章讨论的、用于处理自定义控件上特性的方法,可以给自定义控件(或其组成控件)添加特性。

4. 隐藏字段

客户端代码常常利用HTML隐藏字段(type特性设置为hidden的<input>标记)。RegisterHiddenField方法可以在页面上添加HTML隐藏字段,把它设置为某个初始值,同时确保只插入隐藏字段的一个副本。下面的Visual Basic 2005代码创建了一个隐藏字段BuildQueryString,给它设置了初始值“?”。

csm.RegisterHiddenField("BuildQueryString","?")

C#的对应代码如下所示。

csm.RegisterHiddenField("BuildQueryString","?");

得到的HTML如下所示。

<input type="hidden" name="BuildQueryString" id="BuildQueryString"

value="?" />

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论