App_Data:数据库文件,可以包含SQLExpress(mdf),.mdb,XML文件等
可用于数据库文件的存放,使程序能够自适应的寻找数据库文件。
App_Code:用于存储类、.wsdl文件和类型化的数据集。优点是VS2005可以自动检测到它,不需要引用。
存储类库文件包括数据访问类、实体类、业务逻辑类。
App_GlobalResources:资源文件
可以用来解决本地化的问题,程序会根据浏览器的语言首选项自动判断显示出本地化的界面。
首先在App_GlobalResources新建resx资源文件。如:
不同语言的resx中项目应该具有相同的名称:
中文资源项
英文资源项
完了以后就可以使用这些名值对了
<asp:Literal ID="Literal1" runat="server" Text="<%$ Resources:lang,userinfo%>" /> |
或者
<%=Resources.lang.userinfo%> |
至此你可以更换浏览器的语言首选项来看看效果了。
接下去的问题是怎么通过程序本身的方式来更换语言项。
1. 可以往web.config中增加<globalization culture="en-US" uiCulture="en-US"/>来改变程序默认使用的语言项。
2.可以往global全局应用程序中增加如下代码
void Application_BeginRequest(Object sender, EventArgs e) (Request.Cookies["lang"].Value.ToString());
|
即可通过设置变换cookie值来达到即时切换语言的目的,轻松的实现了程序的多语言。
App_Browsers:.browser文件。是XML文件。用于标识向应用程序发出请求的浏览器,识别这些浏览器的功能。
App_Code文件夹是存贮classes,.wsdl文件和typed datasets的地方。你的解决方案中的所有页面可以自动访问存贮在这个文件夹的任何一个项目。如果这些项目是一个class (.vb or .cs),则Visual Studio 2005会自动检测并编译它;也会自动地创建源于.wsdl文件的XML Web service proxy class;或者一个源于.xsd文件的一个typed dataset。
下面看一个在你解决方案中使用/App_Code文件夹的简单class的例子:
首先在/App_Code文件夹中建立一个Calculator.vb 或 Calculator.cs文件,如下所示:
Listing 3-14: The Calculator class
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);
}
}
其次是对这个class的使用,看下面的一个简单的.aspx文件:
Listing 3-15: An .aspx page that uses the Calculator class
VB
<%@ Page Language=”VB” %>
<!DOCTYPE html PUBLIC “-//W
3C
//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 “-//W
3C
//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>
那么如何在/App_Code文件夹使用两个不同语言的class呢?
首先在/App_Code文件夹中添加两个子文件夹:一个 /VB 文件夹和一个 /CS 文件夹。
/App_Code
/VB
Add.vb
/CS
Subtract.cs
其次修改web.config文件如下:
Listing 3-17: Structuring the web.config file so that classes in the /App_Code folder can use different languages
<compilation>
<codeSubDirectories>
<add directoryName=”VB”></add>
<add directoryName=”CS”></add>
</codeSubDirectories>
</compilation>
2./App_Data Folder
/App_Data文件夹是应用程序存贮数据的地方,可以包括Microsoft SQL Express 文件(.mdf files), Microsoft Access 文件(.mdb files), XML 文件等。
3./App_Themes Folder
/App_Themes文件夹是存贮asp.net 2.0新特性主题需要使用的 .skin 文件, CSS文件和images文件的地方。
4./App_GlobalResources Folder
资源文件(.resx) 是一个在你的应用程序中依据不同文化来改变页面内容的可以作为数据字典的字串表。除字串外,还可添加image等其它文件。
例如添加两个资源文件到此文件夹:
第一个资源文件是Resource.resx这是默认语言使用英语。
Name Value
Answer Hello there
PageTitle Sample Page
Question What is your name?
第二个资源文件是Resource.zh-cn.resx)使用中文。
Name Value
Answer 你好
PageTitle 示例页面
Question 你的名字叫什么?
Listing 3-18: A simple ASP.NET page that uses resource files
VB
<%@ Page Language=”VB” Culture=”Auto” UICulture=”Auto” %>
<!DOCTYPE html PUBLIC “-//W
3C
//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=”Head
1”
runat=”server”>
<title></title>
</head>
<body>
<form id=”Form
1”
runat=”server”>
<p><%= Resources.Resource.Question %></p><br />
<asp:TextBox ID=”Textbox
1”
Runat=”server”></asp:TextBox><br />
<asp:Button ID=”Button
1”
Runat=”server” Text=”Submit”
OnClick=”Button1_Click” />
<p><asp:Label ID=”Label
1”
Runat=”server”></asp:Label></p>
</form>
</body>
</html>
c#
<%@ Page Language=”C#” Culture=”Auto” UICulture=”Auto” %>
<!DOCTYPE html PUBLIC “-//W
3C
//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>
当这个程序运行时,会根据浏览器语言设定而选择使用不同的资源文件。如果语言设定为中文则会显示中文,否则为显示默认英文。
App_LocalResources:用于合并可以在应用程序范围内使用的资源。
App_LocalResources文件夹位于包含一些ASP.NET页面的文件夹下的一个子目录。该文件夹可以使用位于 目录结构中高一级目录中的页面命名的.resx文件进行填充。假定父文件夹包含test.aspx,则可以在App_LocalResources文件夹 中找到一些可用的资源文件如下:test.aspx.resx、test.aspx.it.resx和test.aspx.fr.resx。显然,上述文 件中存储的资源仅对test.aspx页面有影响,因而只能在链接的页面中看见它们(可以使用它们)。
如何访问一个页面特有的资源呢?对于编程访问,可使用如下代码:
HttpContext.GetLocalResourceObject("/ProAspNet20/ResPage.aspx",
"PageResource1.Title")
第1个参数指出页面虚拟路径;第2个参数是资源名称。对于声明式访问,使用meta.:ResourceKey属性。例如,
<asp:Button Runat="server" meta.:resourcekey="ButtonResource1" />
该声明将一个惟一的资源键与特定按钮实例关联。局部文件.resx包含prefix.name形式的条目,其中prefix 是资源键,而name是绑定控件上的属性名。为了赋予按钮一个本地化标题(Text属性),只要在资源文件中创建一个 ButtonResource1.Text条目即可。
局部和全局资源文件夹中存在的资源文件都被编译,以创建附属程序集的类。最后的结果是开发人员创建.resx文件,并测试该页面。而ASP.NET编译机制会完成其余工作。
App_Themes:主题。具体请参看其它资料。
一、简介:
利用Themes我们可以很容易的更改控件、页面的风格,而不需要修改我们的代码和页面文件。Themes文件被单独的放在1个App_Themes文件夹下面,与你的程序是完全分开的。
二、怎么使用Themes和Skins:
先看个非常简单的实例:
App_Themes/default/1.skin文件代码:
<asp:Label Font-Bold="true" ForeColor="Red" runat="server" />
default.aspx:文件代码:
<%@ Page Language="C#" Theme="default" %>
<!DOCTYPE html PUBLIC "-//W
3C
//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Page with Example Theme Applied</title>
</head>
<body>
<form id="form1" runat="server">
<asp:Label ID="Label1" runat="server" Text="Hello 1" /><br />
<asp:Label ID="Label2" runat="server" Text="Hello 2" /><br />
</form>
</body>
</html>
可以看到我们在default.aspx并没有写如何的控制style的代码,但运行取发现label上的字都变成了粗体红色了,这就是1个最基本的theme例子。
App_Themes文件夹:
App_Themes文件夹位于程序的根目录下,App_Themes下必须是Theme名称的子文件夹,子文件夹中可以包含多个.skin和.css文件。建立2个Theme,名称分别为default和default2:
使用themes
1、在1个页面中应用Theme:
如果想在某1个页面中应用Theme,直接在aspx文件中修改<%@ Page Theme="..." %>,比如你想这个页面应用default2 theme,设置<%@ Page Theme="default2" %>就OK
2、在所有页面应用同1个Theme:
如果要在所有页面上使用相同的Theme,在web.config中的<system.web>节点下加上句<pages theme="..."/>
3、让控件不应用Theme:
第1个例子中我们看到了2个Label的风格都变了,就是说.skin文件中的风格在页面上所有Label都起作用了。但有时我们希望某1个Label不应用.skin中的风格,这时你只需设置Label的EnableTheming属性为false的时候就可以了。
也许你还想不同的label显示不同的风格,你只需设置label的SkinID属性就可以,见下面的实例:
App_Themes/default/1.skin
<asp:label runat="server" font-bold="true" forecolor="Red" />
<asp:label runat="server" SkinID="Blue" font-bold="true" forecolor="blue" />
deafult.aspx
<%@ Page Language="C#" Theme="default" %>
<!DOCTYPE html PUBLIC "-//W
3C
//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Page with Example Theme Applied</title>
</head>
<body>
<form id="form1" runat="server">
<asp:Label ID="Label2" runat="server" Text="Hello 2" SkinID="Blue" /><br />
<asp:Label ID="Label3" runat="server" Text="Hello 3" /><br />
</form>
</body>
</html>
运行后就会发现2个label显示的风格不一样了。
4、其他方法:
前面已经说了在aspx文件头使用 <%@ Page Theme="..." %> 来使用theme,而用这个方法应用theme中的风格将会覆盖你写在aspx中的控件属性style。比如:
App_Themes/default/1.skin
<asp:Label Font-Bold="true" ForeColor="Red" runat="server" />
default.aspx
<%@ Page Language="C#" Theme="default" %>
<!DOCTYPE html PUBLIC "-//W
3C
//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
</head>
<body>
<form id="form1" runat="server">
<asp:Label ID="Label1" runat="server" Text="Hello 1" /><br />
<asp:Label ID="Label2" runat="server" Text="Hello 2" ForeColor="blue" />
</form>
</body>
</html>
运行结果,所有的label的forecolor都为red。
而使用<%@ Page StyleSheetTheme="..." %>应用theme就不会覆盖你在aspx文件中写的属性style:
控件应用style属性的顺序如下:
a、StyleSheetTheme引用的风格
b、代码设定的控件属性(覆盖StyleSheetTheme)
c、Theme引用的风格(覆盖前面2个)
theme中包含CSS:
theme中也可以使用.css文件,当你把.css文件放在1个theme目录下后,在用到了这个theme的页面中自动会应用你的.css的
三、后台代码轻松为网站换府肤
前面讲的都是在aspx文件或web.config中应用theme,而在blog这样的每个用户都有不同的skin的网站中用上面的方法来实现换skin显然是不方便的。
下面就介绍怎么在后台代码中动态的引用theme来解决上面的情况,theme必须在page被请求的最早期就应用上,所以我们必须在Page_PreInit事件中写代码,代码很简单,就1句:
Page.Theme = "...";
这里我们只要从数据库中去读取每个用户设置的不同theme名就可以轻松实现每个用户都有不同的skin了。
Bin:Bin文件夹包含应用程序所需的,用于控件、组件或者需要引用的任何其他代码的可部署程序集。该目录中存在的任何.dll文 件将自动地链接到应用程序。
.dll
包含应用程序所需的任何预生成的程序集。