9.1.2 静态和动态的客户端代码
在Visual Studio 2005中,可以进入ASCX页面的Source视图中,给用户控件添加静态的客户端代码,如图9-1所示。Visual Studio 2005的ASCX文件中的Source视图为客户端程序员提供了IntelliSense支持,包括在设计期间进行某些语法检查。这是静态代码的极限:每个浏览器请求带有用户控件的页面时,都会得到相同的代码(高效地执行第三个策略)。但是,Web Part和自定义控件都没有Source视图,所以不能对它们使用该策略。

图 9-1
较好的解决方案是移动到动态代码实现方式的最底层。在这一层上,可以确定请求页面的是哪一类客户机,并提供一组标准的客户端代码—— 但只给能执行它们的客户机提供。例如,如果页面由crawler(由搜索站点用于查找和索引Web页面的程序)请求,就可以忽略关联到用户操作上的客户端代码。这一层动态代码集成实现了第一个策略:把代码只提供给可以处理它们的客户机,这个策略可以用于自定义控件、用户控件和Web Part。
使用Browser对象可以确定我们所使用的客户机类型,Browser对象可以从ASP.NET的Request对象中获得。下面的示例确定客户机是crawler还是声名狼藉的AOL浏览器,并对这两种浏览器忽略添加的客户端代码(下一节将学习把客户端代码添加到页面上的工具)。
If Me.Page.Request.Browser.Crawler = False Or _
Me.Page.Request.Browser.AOL = False Then
...dynamic client-side code...
End If
C#的对应代码如下所示。
if(this.Page.Request.Browser.Crawler == false ||
this.Page.Request.Browser.AOL == false)
{
...dynamic client-side code...;
}
下面的Visual Basic 2005示例采用了一种更坚固的方式。在这个示例中,只有浏览器是Internet Explorer的最近版本,才生成代码。
If Me.Page.Request.Browser.Browser = "IE" And _
Me.Page.Request.Browser.MajorVersion > 4 Then
...dynamic client-side code...
End If
C#的对应代码如下所示。
if(this.Page.Request.Browser.Browser == "IE" &&
this.page.Request.Browser.MajorVersion > 4)
{
...dynamic client-side code...
}






