图 4:Default.aspx 的初始输出
图 5:计算后的输出
资源文件
如果您以前在 Visual Studio .NET 2002 或 2003 中使用过 Web 应用程序,您一定已经注意到每次创建新 Web 窗体页时,除了 .aspx 页以及 .vb 或 .cs 模块化文件之外,Visual Studio 还会创建一个具有 .resx 扩展名的匹配文件(即 WebForm1.aspx.resx)。与大多数 Web 开发人员一样,您可能也会忽略或试图删除这些文件,因为它们的用途和/或用法并不是很直观。简言之,这些 .resx 文件称为“资源文件”,主要用于存储各个版本的资源,例如用于本地化的不同语言的文本字符串。
在 Visual Studio .NET 2002 和 2003 中,资源文件需要作为生成项目进程的一部分添加到项目程序集中,并且需要导入两个命名空间,创建一个 ResourceManager 对象,并调用其 GetString 方法以访问资源字符串。
在 \Code 目录的帮助下,Visual Studio .NET Whidbey 中的资源访问过程变得非常简单,如下面的示例所示。
我们先从创建资源文件开始,还是使用上一个示例中的项目。首先,右击刚才创建的 Compilation Web 站点,然后单击 Add New Item...(添加新项...)。在 Add New Item(添加新项)对话框中,选择 Assembly Resource File(程序集资源文件)模板,将资源文件命名为 strings.resx,然后单击 Open(打开)。strings.resx 文件的默认视图应与图 6 类似。
图 6:在 XML 编辑器中编辑资源文件
将以下项添加到数据表中(可以将“comment”(注释)、“type”(类型)和“mimetype”(MIME 类型)列保留为空):
名称
值
txtColorPrompt
请选择一种颜色:
txtColorResponseRed
您选择了红色!
txtColorResponseGreen
您选择了绿色!
txtColorResponseBlue
您选择了蓝色!
现在重复上述过程,添加一个名为 strings.en-GB.resx 的新资源文件,并将以下项添加到其数据表中,然后保存文件(因为我们没有添加 txtColorResponse* 的项,所以所有客户机都将使用 strings.resx 中的这些项的值):
名称
值
txtColorPrompt
请选择一种颜色:
现在,为了充分利用 Code 目录的神奇作用,我们需要将这两个 .resx 文件从 Web 站点的根目录拖到 Code 目录中。完成上述操作后,将得到类似图 7 的结果。
图 7:Code 目录中的 .resx 文件
为了说明现在使用创建的资源文件是多么简单,我们将一个 Web 窗体添加到项目中,方法如下:右击 Web 站点节点,然后单击 Add New Item....(添加新项...)。在 Add New Item(添加新项)对话框中,选择 Web 窗体,将页面命名为 ColorPicker.aspx,然后单击 Open(打开)。修改此页面,使其与以下列表匹配。
ColorPicker.aspx: <%@ page UICulture="en-GB" language="VB" %>
<script runat="server">
Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Label1.Text = Resources.strings.txtColorPrompt
End Sub
Sub Submit_Click(ByVal sender As Object, _
ByVal e As System.EventArgs)
Label1.ForeColor = _
System.Drawing.Color.FromName(Dropdownlist1.SelectedValue)
Select Case Dropdownlist1.SelectedValue
Case "红色"
Label1.Text = Resources.strings.txtColorResponseRed
Case "绿色"
Label1.Text = Resources.strings.txtColorResponseGreen
Case "蓝色"
Label1.Text = Resources.strings.txtColorResponseBlue
End Select
Dropdownlist1.Visible = False
Submit.Visible = False
End Sub
</script>
<html>
<head runat="server">
<title>颜色选取器</title>
</head>
<body>
<form runat="server">
<asp:label id="Label1" runat="server">Label</asp:label>
<asp:dropdownlist id="Dropdownlist1" runat="server">
<asp:listitem value="Red">红色</asp:listitem>
<asp:listitem value="Green">绿色</asp:listitem>
<asp:listitem value="Blue">蓝色</asp:listitem>
</asp:dropdownlist>
<asp:button id="Submit"
text="提交" runat="Server" onclick="Submit_Click" />
</form>
</body>
</html>
当从浏览器中浏览 ColorPicker.aspx 时,默认输出与图 8 类似。如果从为英国用户设置的系统中浏览此页面(您可以通过将页面的 UICulture 属性设置为“en-GB”并保存页面来模拟此情形),输出将与图 9 类似(请注意,我们已经在“colour”中添加了 u)。
图 8:ColorPicker.aspx 的默认输出
图 9:英国系统的 ColorPicker.aspx 输出
请注意,在 ASP.NET Whidbey 中访问资源文件只需要一行代码。因为将资源文件放到 Code 目录中后,即可自动嵌入和引用该资源文件,所以不需要引用任何命名空间或程序集,也不需要为访问资源字符串创建对象。而且 ASP.NET 还可以确定应该使用哪个资源文件(基于用户浏览器的设置),因此我们不需要在运行时对此进行判断并作出相应的响应。ASP.NET 可以帮助我们完成这一切。
预编译支持
ASP.NET Web 窗体的优势之一就是增加动态编译后,您可以很轻松地更改 .aspx 页,保存更改时页面将动态更新,而不需要重新编译(只要不使用模块化代码)。但动态编译并不是对每个应用程序都适合,而且第一次访问某个应用程序时,动态编译会导致浏览器的初始性能降低。另外,很多时候您可能希望部署一个没有源代码的应用程序。
如果您遇到上述情况,您会更高兴地了解到 ASP.NET Whidbey 具有支持预编译 Web 站点的功能。ASP.NET Whidbey 支持两种预编译模式:在位预编译和部署预编译。
在位预编译
在位预编译使您可以对 Web 站点中的所有页面进行手动批编译。这也是用户在您的应用程序中首次单击某个页面后发生的操作(前文提到的后一种情况除外),用户只需坐下来等待批编译完成。
使用在位预编译有两个主要原因:首先,它可以避免第一次请求页面时批编译的性能降低;其次,它使您可以“先于”用户发现编译错误。
在位预编译也很容易实现,只需浏览到 Web 站点的根目录,添加特定的处理程序名称 precompile.axd(熟悉 ASP.NET 跟踪功能的用户会发现该名称与 trace.axd 处理程序的名称类似): http://localhost/mywebsitename/precompile.axd
其中 mywebsitename 是您 Web 站点的名称。预编译站点之后,对站点内页面的请求也应随即完成,而不会有任何编译滞后。
部署预编译
第二种预编译模式使您可以创建整个 Web 站点的可执行版本,部署这种版本不需要任何源代码(包括 HTML 和其他静态文件)。因此,部署预编译可以防止别人随意访问由代码表示的知识产权信息。生成的程序集和 Stub 文件集可以通过 XCOPY、FTP、Windows 资源管理器等部署到生产服务器上。
为了预编译站点以进行部署,ASP.NET Whidbey 提供了一个名为 aspnet_compiler.exe 的命令行实用程序。要在文件系统 Web 站点上调用 ASP.NET 预编译器,需要打开一个命令窗口,浏览到 .NET Framework 的安装位置(<Windows>\Microsoft.NET\Framework\<版本>),然后输入以下命令: aspnet_compiler /v /<websitename> -p <source> <destination>
其中 <websitename> 为 Web 站点的名称(即在浏览器中输入的名称),<source> 和 <destination> 为两个文件系统路径,分别指向要编译站点的位置以及编译后的版本应输出至的位置。以我们的 Web 站点为例,输入的命令如下所示(请注意下面是一条命令): aspnet_compiler /v /Compilation
-p c:\WebSites\Compilation c:\WebSites\Compilation_Compiled
如果要查看 ASP.NET 预编译器的所有可用选项,只需输入以下命令: aspnet_compiler /?
请注意,某些命令行选项要求 Web 站点必须为有效的 Microsoft® Internet 信息服务 (IIS) 应用程序才能正常工作。
如果在 Microsoft® Windows 资源管理器中浏览至目标目录,您会看到预编译 Web 站点后将生成一个包含 bin 目录的站点,bin 目录中包含一些程序集和描述性文件,以及大量与原始页面同名的 Stub 文件,但不包含代码(包括 HTML 和可执行代码)。如果浏览此站点,输出与原始站点的输出相同。请注意,不能在已进行部署预编译的站点上使用在位预编译,原因很简单,因为它已经被预编译过了。
IntelliSense 无处不在!
对于 Visual Studio .NET 2002 和 2003,最令我头痛的问题之一(相信很多开发人员也有同感)就是对 IntelliSense 和其他用于提高生产率的功能的支持不一致。希望在 HTML 视图中将控件从工具箱中拖到页面上吗?还做不到。事实上,在 HTML 视图中根本看不到工具箱的 Web 窗体面板!要在 .aspx 页面上写入内嵌代码而不是使用模块化代码?可以做到,但必须放弃 IntelliSense、拖放功能以及其他更多功能。最后,正如我最近在 MSDN ASP.NET Developer Center 上发表的文章中提到的,在 Visual Studio .NET 2002 或 2003 中获得自定义控件的设计时支持需要跨越层层障碍,包括有点粗糙但奏效的 XSL 修改。
令人高兴的是,ASP.NET Whidbey 中实现了编译模型的统一,所有这些问题也都迎刃而解。在 Visual Studio .NET Whidbey 中,可以写入内嵌代码或使用新的模块化代码模型,还能获得控件拖放、IntelliSense 语句完成以及所有以前您希望使用却因编码方式局限而无法使用的那些可以提高生产率的功能。另外,对自定义服务器控件和 Web 控件的设计时支持有了很大的改进,包括为源视图(HTML 视图在 Visual Studio .NET Whidbey 中的等效视图)中的自定义控件增加了 IntelliSense 语句完成。
小结
ASP.NET Whidbey 中对编译模型的更改,以及 Visual Studio .NET Whidbey 中相应功能的改进无疑是一个巨大的飞跃,不仅为开发人员提供了所需的灵活性,还使他们可以充分利用 IDE 提供的可以提高生产率的功能。大大简化的模块化代码模型将使该功能更有用、更简捷,而新增的对内嵌代码的完全支持显然会受到那些希望所有代码都位于一个 .aspx 文件中的开发人员的欢迎。
相信 \Code 目录会大大提高生产率,对于那些从事发展迅速的中小型项目的开发人员,以及那些因为编译过程过于复杂而无法完成工作的开发人员来说尤其如此。它还为访问业务逻辑组件、资源文件、WSDL 文件以及其他资源提供了一种更为直接、简单的方法:通过自动编译、嵌入或创建这些资源的代理并自动引用它们,只需很少的代码即可访问这些资源。
预编译功能使开发人员可以轻松地提高其站点的初始性能,如果需要,还可以通过提供功能完备的 Web 应用程序(不包含源代码或 HTML)为重要的知识产权信息添加保护措施。
最后,集所有功能于一身的 Visual Studio .NET Whidbey 无疑会为开发人员带来非凡的体验,他们不仅能从内嵌代码模型和模块化代码模型中获得完全的 IntelliSense 支持,还能查看给定页面的所有视图,开发工作不会再因工具限制而局限于某一种样式。
作者简介
G. Andrew Duthie 是 Graymad Enterprises, Inc.(英文)的创始人和负责人,该公司提供 Microsoft Web 开发技术的培训和咨询服务。自从 Active Server Pages 问世以来,Andrew 一直从事多层 Web 应用程序的开发工作。他编写了大量有关 ASP.NET 的书籍,包括《Microsoft ASP.NET Programming with Microsoft Visual Basic》、《Microsoft ASP.NET Programming with Microsoft Visual C#》和《ASP.NET in a Nutshell》(第二版)。Andrew 经常在一些重大活动中发表演讲,这些活动包括“Software Development”、“Dev-Connections family of conferences”、“Microsoft Developer Days”以及“VSLive!”。他还作为 International .NET Association (INETA)(英文)Speaker''''s Bureau 成员在 .NET 用户组上发表了演讲。您可以从其公司的 Web 站点 http://www.graymad.com/(英文)上了解到有关 Andrew 的更多信息。
上一页 [1] [2] [C语言系列]NET 中C#的switch语句的语法 [系统软件]托拽Explore中的文件到VB.net的窗口 [系统软件]Boost库在XP+Visual C++.net中的安装 [常用软件]新配色面板:Paint.Net3.0RC1官方下载 [常用软件]用内建的“Net Meeting”聊天 [VB.NET程序]Henry的VB.NET之旅(三)—共享成员 [VB.NET程序]Henry的VB.NET之旅(二)—构造与析构 [VB.NET程序]Henry的VB.NET之旅(一)—失踪的窗体 [VB.NET程序]在托盘上显示Balloon Tooltip(VB.NET) [VB.NET程序]Henry手记-VB.NET中动态加载Treeview节点(二)
|