你可以使用声明语法把 ASP.NET 服务器控件的属性值设置成资源的值。另外,你也可以通过编程来获取资源的值。如果资源的值在设计时是未知的,或者你需要设置基于运行时条件的资源值,那么你就可能会这样做。
你可以分别从局部资源文件和全局资源文件中获取资源的值,这些资源文件使用方法来返回一个能够让你转换成适当类型的对象。因为 ASP.NET 使用强类型来编译全局资源,所以你也可以使用强类型化的成员来获取全局资源。
通过编程来获取资源的值
- 分别调用 GetLocalResourceObject 方法或者 GetGlobalResourceObject 方法从全局资源文件或者局部资源文件中读取特定的资源。这些已重载的方法能够在 HttpContext 类和 TemplateControl 类中可用。
GetGlobalResourceObject 方法获取一个资源类的名称和资源 ID。并且资源类的名称基于 .resx 文件名称。例如,WebResources.resx 文件以及所有相关的局部化资源都能够通过类的名称 WebResources 而被访问。
GetLocalResourceObject 方法会获取资源的名称来呈现 ResourceKey 属性。
下列代码范例说明了如何从局部资源文件或者全局资源文件中获取资源的值。并且这个方法还会返回一个对象;因此,你必须把资源转换成适当的类型。
默认的局部资源文件被存储在特殊的 App_LocalResources 目录中(依照 ASP.NET 页面而被命名)。例如,如果下列代码在 Default.aspx 页面中使用,那么资源文件就必须被命名成 Default.aspx.resx。在这个范例中,我们为这个文件添加一个名为 Button1.Text 并且值是 "Found Resources" 的字符串资源。
同样在这个范例中,默认的全局资源文件则被存储在特殊的 App_GlobalResources 目录中(名为 WebResourcesGlobal.resx)。添加一个名为 LogoUrl 的字符串资源,并且赋值为 http://go.microsoft.com/fwlink/?LinkId=49295 或者是另外一个图片的 URL。
<%@ Page Language="C#" %> <script runat="server"> protected void Button1_Click(object sender, EventArgs e) { Button1.Text = GetLocalResourceObject("Button1.Text").ToString(); Image1.ImageUrl = (String)GetGlobalResourceObject( "WebResourcesGlobal", "LogoUrl"); Image1.Visible = true; } </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Get Resources" /> <asp:Image ID="Image1" runat="server" Visible="false" /> </div> </form> </body> </html>
使用强类型化来获取全局资源
- 使用下列语法来获取资源:
Resources.Class.Resource
资源会被编译进 Resources 命名空间中,并且每个默认资源都会变成这个 Resources 类的一个成员。例如,如果你已经创建了默认的资源文件 WebResources.resx,并且这个文件包含一个名为 WelcomeText 的资源,那么你就可以在代码中引用这个资源,如下代码范例所示:
String welcome; welcome = Resources.WebResources.WelcomeText;