Yelven's Blog

玉蜂博客
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

ASP.NET应用程序文件夹

Posted on 2007-06-12 01:37  玉蜂  阅读(746)  评论(0)    收藏  举报
 

3.7   ASP.NET应用程序文件夹

在创建ASP.NET应用程序时,注意ASP.NET 2.0现在使用基于文件的方法。在使用ASP.NET 2.0时,可以在应用程序中增加任意多个文件和文件夹,而无须每次在给解决方案添加新文件时重新编译它们。ASP.NET 2.0能自动、动态地预编译ASP.NET应用程序。

ASP.NET 1.0/1.1把解决方案中的所有内容都编译到DLL中。现在不再需要这么做了,因为ASP.NET 2.0应用程序有一个定义好的文件夹结构。使用ASP.NET 2.0定义好的文件夹,就可以自动编译代码,在整个应用程序中访问应用程序主题,并在需要时使用全局资源。下面介绍这些定义好的文件夹及它们的工作方式。第一个是\App_Code文件夹。

3.7.1   \App_Code文件夹

\App_Code文件夹用于存储类、.wsdl文件和类型化的数据集。存储在这个文件夹中的所有项都可自动用于解决方案中的所有页面。\App_Code文件夹的优点是把某个对象放在这个文件夹后,Visual Studio 2005就会自动检测到它,如果它是一个类(.vb 或.cs),就编译它,自动创建XML Web服务代理类(从.wsdl文件中),或从.xsd文件中自动创建类型化的数据集。文件自动编译后,这些项能立即用于同一个解决方案中的任意ASP.NET页面。下面看看如何通过\App_Code文件夹使用解决方案中的一个简单类。

第一步是创建\App_Code文件夹。为此,右击解决方案,选择Add Folder | App_Code Folder。Visual Studio 2005对待这个文件夹的方式与解决方案中的其他文件夹不同。\App_Code文件夹显示为不同的颜色(灰色),在文件夹图标的旁边有一个文档图片,如图3-8所示。

图   3-8

创建好\App_Code文件夹之后,右击该文件夹,选择Add New Item,就会打开Add New Item对话框,该对话框并没有给出可以放在这个文件夹中的许多文件类型选项。可用的选项有Class文件、Text文件、DataSet、Report和Class Diagram(若使用Visual Studio 2005)。Visual Web Developer 2005 Express Edition只提供了Class文件、Text文件和DataSet文件。下面的第一个例子选择Class文件类型,类命名为Calculator.vb或Calculator.cs。程序清单3-14显示了Calculator类。

程序清单3-14   Calculator类

VB

Imports Microsoft.VisualBasic

Public Class Calculator

     Public Function Add(ByVal a As Integer, ByVal b As Integer) As Integer

         Return (a + b)

     End Function

End Class

C#

using System;

public class Calculator

{

     public int Add(int a, int b)

         {

             return (a + b);

     }

}

下一步,保存这个文件,现在它就可用于解决方案中的任意页面了。为了证明这一点,创建一个简单的.aspx页面,其中只有一个Label服务器控件。程序清单3-15把代码放在Page_Load事件中,使这个新类可用于页面。

程序清单3-15   使用类Calculator的.aspx页面

VB

<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"

"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<script runat="server">    

     Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)

         Dim myCalc As New Calculator

         Label1.Text = myCalc.Add(12, 12)

     End Sub

</script>

C#

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"

"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<script runat="server">    

     protected void Page_Load(object sender, System.EventArgs e)

     {

         Calculator myCalc = new Calculator();

         Label1.Text = myCalc.Add(12, 12).ToString();

     }    

</script>

在运行这个.aspx页面时,注意它使用了Calculator类,在使用前不需要编译该类。实际上,在解决方案中保存Calculator类,或把这个类移动到\App_Code文件夹之后,就能立即在IntelliSense中看到该类的方法,如图3-9所示。

图   3-9

为了说明是Visual Studio 2005如何使用\App_Code文件夹的,请再次在IDE中打开Calculator类,添加一个Subtract方法。Calculator类应如程序清单3-16所示。

程序清单3-16   给Calculator类添加Subtract 方法

VB

Imports Microsoft.VisualBasic

Public Class Calculator

     Public Function Add(ByVal a As Integer, ByVal b As Integer) As Integer

         Return (a + b)

     End Function

     Public Function Subtract(ByVal a As Integer, ByVal b As Integer) As Integer

         Return (a - b)

     End Function

End Class

C#

using System;

public class Calculator

{

     public int Add(int a, int b)

     {

             return (a + b);

     }

     public int Subtract(int a, int b)

     {

             return (a - b);

     }

}

给Calculator类添加了Subtract方法之后,保存文件,返回.aspx页面。注意,IDE已重新编译了Calculator类,新方法现在可用于页面。可以在IntelliSense中看到这个方法,如图3-10所示。

图   3-10

\App_Code文件夹中的所有内容都编译到一个程序集中。放在\App_Code文件夹中的类文件不需要使用特定的语言。也就是说,即使解决方案中的所有页面都是用Visual Basic 2005编写的,解决方案的\App_Code文件夹中的Calculator类也可以用C#建立(Calculator.cs)。

这个文件夹包含的所有类都放在一个程序集中,所以在\App_Code根文件夹中不能有不同语言设置的类,如下面的代码所示:

\App_Code

    Calculator.cs

    AdvancedMath.vb

如果\App_Code文件夹中的两个类是用不同的语言建立的(如上所示),就会产生一个错误。不能让编译器处理两种不同的语言。所以,为了能在App_Code文件夹中使用多种语言,必须对文件夹结构和web.config文件进行一些修改。

第一步是给\App_Code文件夹添加两个子文件夹:\VB文件夹和\CS文件夹,于是文件夹结构如下:

\App_Code

    \VB

       Add.vb

    \CS

       Subtract.cs

但仍不能把这些类文件编译到不同的程序集中,至少在给web.config文件添加一些内容之前不能。但此时解决方案中还没有web.config文件,所以通过Solution Explorer添加该文件。之后,修改<compilation>节点,使其结构如程序清单3-17所示。

程序清单3-17   构建web.config文件,使\App_Code文件夹中的类可以使用不同的语言

<compilation>

    <codeSubDirectories>

       <add directoryName="VB"></add>

       <add directoryName="CS"></add>

    </codeSubDirectories>

</compilation>

在web.config文件中进行了修改后,就可以处理ASP.NET页面中的各个类了。CS文件夹中的C#类现在与VB文件夹中的类一样,会自动编译。把这些指令添加到web.config文件中后,就不需要像以前那样给它们命名VB和CS了,而可以使用任意名称。

3.7.2   \App_Data文件夹

\App_Data文件夹保存应用程序使用的数据库。它是一个集中存储应用程序所用数据库的地方。\App_Data文件夹可以包含Microsoft SQL Express文件(.mdf)、Microsoft Access文件(.mdb)、XML文件等。

应用程序使用的用户账户具有对\App_Data文件夹中任意文件的读写权限。该用户账户默认为ASPNET账户。在这个文件夹中存储所有数据文件的另一个原因是,许多ASP.NET系统,从成员和角色管理系统到GUI工具,如ASP.NET MMC插件和ASP.NET Web站点管理工具,都构建为使用\App_Data文件夹。

3.7.3   \App_Themes文件夹

主题是为站点上的每个页面提供统一外观和操作方式的一种新方法。通过.skin文件、CSS文件和站点上服务器控件使用的图像来实现主题功能。所有这些元素都可以构建一个主题,并存储在解决方案的\App_Themes文件夹中。把这些元素存储在\App_Themes文件夹中,就可以确保解决方案中的所有页面都利用该主题,并把其元素应用于控件和页面的标记。主题详见本书第9章。

3.7.4   \App_GlobalResources文件夹

资源文件是一些字符串表,当应用程序需要根据某些事情(如文化上的改变)进行修改时,资源文件可用于这些应用程序的数据字典。可以在这个文件夹中添加程序集资源文件(.resx),它们会动态编译,成为解决方案的一部分,供应用程序中的所有.aspx页面使用。在使用ASP.NET 1.0/1.1时,必须使用resgen.exe工具,把资源文件编译为.dll或.exe,才能在解决方案中使用。而在ASP.NET 2.0中,资源文件的处理就容易多了。

除了字符串之外,还可以在资源文件中添加图像和其他文件。下面举例说明如何使用资源文件创建使用多语言的ASP.NET 2.0应用程序。首先在应用程序中创建\App_GlobalResources文件夹,对于这个例子,在这个文件夹中创建两个资源文件Resource.resx和Resource.fi-FI.resx。第一个文件Resource.resx是使用美国英语的默认语言文件。第二个文件包含相同的文本,但使用芬兰语。因此,这个文件的名称使用fi-FI。当有人使用fi-FI的浏览器文化调用页面时,就会看到来自这个文件(Resource.fi-FI.resx)的信息。其他进入这个站点的人都会获得来自另一个文件(Resource.resx)的信息。

注意如图3-11所示,可以用.resx文件执行许多操作。其关键是创建要本地化的项目表(例如文本、图像和文件)。对于这个例子,可以只创建文本。

图   3-11

Resource.resx文件的结构如下:

Name                    Value

Answer                  Hello there

PageTitle              Sample Page

Question               What is your name?

Resource. fi-FI.resx文件的结构如下:

Name                    Value

Answer                   Hei

PageTitle              Näytesivu

Question               Mikä sinun nimi on?

要使用这些文件,可以用程序清单3-18中的代码创建一个简单的.aspx页面:

程序清单3-18   使用资源文件的简单ASP.NET页面

VB

<%@ Page Language="VB" Culture="Auto" UICulture="Auto" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"

"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<script runat="server">    

     Protected Sub Page_Load(ByVal sender As Object, _

        ByVal e As System.EventArgs)

         Page.Title = Resources.Resource.PageTitle

     End Sub

    

     Protected Sub Button1_Click(ByVal sender As Object, _

        ByVal e As System.EventArgs)

         Label1.Text = Resources.Resource.Answer & " " & Textbox1.Text

     End Sub

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >

<head id="Head1" runat="server">

     <title></title>

</head>

<body>

     <form id="Form1" runat="server">

         <p><%= Resources.Resource.Question %></p><br />

         <asp:TextBox ID="Textbox1" Runat="server"></asp:TextBox><br />

         <asp:Button ID="Button1" Runat="server" Text="Submit"

          OnClick="Button1_Click" />

         <p><asp:Label ID="Label1" Runat="server"></asp:Label></p>

     </form>

</body>

</html>

C#

<%@ Page Language="C#" Culture="Auto" UICulture="Auto" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"

"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<script runat="server">    

     protected void Page_Load(object sender, System.EventArgs e)

     {

         Page.Title = Resources.Resource.PageTitle;

     }

    

     protected void Button1_Click(object sender, System.EventArgs e)

     {

        Label1.Text = Resources.Resource.Answer + " " + Textbox1.Text;

     }

</script>

运行这个页面时,会根据浏览器中的文化设置给出相应的文本。如果这个设置不是fi-FI,就得到美国英语文本。页面输出如图3-12所示。

图   3-12

为了看到芬兰语文本,在Microsoft Internet Explorer浏览器中选择Tools | Internet Options,改变文化设置。这会打开Internet Options对话框,在第一个选项卡General中,可以单击Languages按钮,打开一个对话框,把芬兰语指定为选中的语言。把芬兰语添加到列表中后,确保它是对话框中最上面的一个选项。为此,要突出显示这个选项,单击Move Up按钮,直到它位于最上面为止。

完成后运行页面,就会在输出中看到芬兰语文本,如图3-13所示。

图   3-13

3.7.5   \App_LocalResources文件夹

\App_GlobalResources文件夹用于合并可以在应用程序范围内使用的资源。如果对构造应用程序范围内的资源不感兴趣,而对只能用于一个.aspx页面的资源感兴趣,就可以使用\App_LocalResources文件夹。

可以把专用于页面的资源文件添加到\App_LocalResources文件夹中,方法是构建.resx文件名,如下所示:

●        Default.aspx.resx

●        Default.aspx.fi.resx

●        Default.aspx.ja.resx

●        Default.aspx.en-gb.resx

现在,可以从\App_LocalResources文件夹的相应文件中检索在Default.aspx页面上使用的资源声明。如果没有找到匹配的资源,就默认使用Default.aspx.resx资源文件。如果客户机使用fi-FI (Finnish)文化设置,就使用Default.aspx.fi.resx文件。

3.7.6   \App_WebReferences文件夹

\App_WebReferences文件是ASP.NET以前版本中Web References文件夹的新名称。使用\App_WebReferences文件夹可以自动访问应用程序引用的远程Web服务。ASP.NET中的Web服务详见第26章。

3.7.7   \App_Browsers文件夹

\App_Browsers文件夹包含.browser文件,这些.browser文件是XML文件,用于标识向应用程序发出请求的浏览器,并识别这些浏览器具备的功能。C:\Windows\Microsoft.NET\ Framework\v2.0xxxxx\CONFIG\Browsers上有可全局访问的.browser文件列表。另外,如果要修改这些默认浏览器定义文件中的任意部分,只需把相应的.browser文件从Browsers文件夹复制到应用程序的\App_Browsers文件夹中,并修改定义即可。