Практическое руководство. Извлечение значений ресурсов программными средствами
Обновлен: Ноябрь 2007
Для присвоения значениям свойств серверного элемента управления ASP.NET значения ресурса можно использовать декларативный синтаксис. В качестве альтернативы можно извлечь значения ресурсов программными средствами. Можно сделать это, если значение ресурса неизвестно во время разработки или если необходимо задать значение ресурса на основании условия времени выполнения.
Можно получить значения ресурса как из локального, так и из глобального файла ресурсов, использующего методы, возвращающие объект, который можно привести к определенному типу. Поскольку ASP.NET компилирует глобальные ресурсы со строгой типизацией, можно получить глобальные ресурсы, используя строго типизованные члены.
Извлечение значений ресурсов программными средствами
Вызовите метод GetLocalResourceObject или GetGlobalResourceObject для считывания конкретного ресурса из глобального или локального файла ресурсов соответственно. Эти перегруженные методы доступны в классах HttpContext и TemplateControl.
Метод GetGlobalResourceObject принимает имя класса ресурса и идентификатор ресурса. По умолчанию за основу имени класса берется имя 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;