如何:以编程方式检索资源值

更新:2007 年 11 月

可以使用声明性语法将 ASP.NET 服务器控件属性值设置为资源值,也可以以编程方式检索资源值。如果在设计时资源值未知或者需要根据运行时条件设置资源值,可能会这样做。

可以从本地资源文件和全局资源文件中获取资源值,这些文件使用的方法返回一个可强制转换为适当类型的对象。由于 ASP.NET 使用强类型编译全局资源,因此也可以使用强类型成员获取全局资源。

以编程方式检索资源值

  • 调用 GetLocalResourceObject 或 GetGlobalResourceObject 方法以分别从全局资源文件或本地资源文件中读取特定的资源。在 HttpContextTemplateControl 类中提供了这些重载方法。

    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 的字符串资源,而且该资源带有 https://go.microsoft.com/fwlink/?LinkId=49295 值或其他图像的 URL。

    <%@ Page Language="VB" %>
    
    <script runat="server">
        Protected Sub Button1_Click( _
            ByVal sender As Object, ByVal e As System.EventArgs)
            Button1.Text = _
                GetLocalResourceObject("Button1.Text").ToString()
            Image1.ImageUrl = _
                CType(GetGlobalResourceObject("WebResourcesGlobal", _
               "LogoUrl"), String)
            Image1.Visible = True
        End Sub
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head 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>
    
    <%@ 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 的资源,则可以在代码中引用该资源,如下面的代码示例所示:

    Dim welcome As String
    welcome = Resources.WebResources.WelcomeText
    
    String welcome;
    welcome = Resources.WebResources.WelcomeText;
    

请参见

概念

ASP.NET 网页资源概述