1

假设我们有这样的网站结构:

App_LocalResources
      |- A.aspx.resx
      |- B.aspx.resx
A.aspx
B.aspx

现在我在 A.aspx.cs 中使用 HttpContext.GetLocalResourceObject("~/A.aspx", "Key1") 它工作正常。但是,如果我在 B.aspx.cs 中使用 HttpContext.GetLocalResourceObject("~/A.aspx", "Key1") ,则会引发异常:

未找到此页面的资源类。请检查资源文件是否存在,然后重试。

异常详细信息:System.InvalidOperationException:找不到此页面的资源类。请检查资源文件是否存在,然后重试。

我该如何解决这个问题?我想从外部页面读取本地资源,我不想自己读取 .resx 文件。谢谢 :-)

更新:就我而言,有一些“data.xml”文件(它们位于不同的目录中,并且具有类似的元素<key name='Key1' value='value1' />),它们的内容将呈现为 html。

但是data.xml中的键名应该在渲染前进行本地化(不同的data.xml包含不同的键)。

例如,data.xml 有这样一个元素:

<key name='CategoryId' value='3' />

在结果 html 页面中,我想为 en-US 文化显示“Category Id = 3”,为 zh-CN 文化显示“类别 = 3”等。

所以我想我可以data.xml.??-??.resx在文件夹中按照“”模式创建一些文件App_LocalResources,然后使用HttpContext.GetLocalResource()for each data.xml 来检索本地化的键名。这样我就不需要自己阅读 xml 了。可能吗?

4

3 回答 3

5

这不是应该使用本地资源的方式。本地资源仅对页面或控件有效。在您的情况下,您应该使用全局资源。

来自MSDN

全局资源文件

通过将全局资源文件放在应用程序根目录的保留文件夹 App_GlobalResources 中来创建全局资源文件。App_GlobalResources 文件夹中的任何 .resx 文件都具有全局范围。此外,ASP.NET 生成一个强类型对象,它为您提供了一种以编程方式访问全局资源的简单方法。

本地资源文件

本地资源文件是仅适用于一个 ASP.NET 页面或用户控件(文件扩展名为 .aspx、.ascx 或 .master 的 ASP.NET 文件)的文件。您将本地资源文件放在具有保留名称 App_LocalResources 的文件夹中。与根 App_GlobalResources 文件夹不同,App_LocalResources 文件夹可以位于应用程序的任何文件夹中。您可以使用资源文件的名称将一组资源文件与特定网页相关联。

并且对您检查如何以编程方式访问资源也很有用

    Button1.Text = 
        GetLocalResourceObject("Button1.Text").ToString();
    Image1.ImageUrl = 
        (String)GetGlobalResourceObject(
        "WebResourcesGlobal", "LogoUrl");
    Image1.Visible = true;
于 2010-06-08T12:48:20.130 回答
3

正如 Claudio Redi 建议的那样,使用全局资源文件。

我会以“filename.resx”的格式为每个 xml 文件创建一个,因此在您的示例中,您将其命名为Data.resx.

将资源中的“名称”设置为您的“名称”属性,并将值设置为翻译后的“名称”。

例如,在 中Data.resx,您将拥有Name=CategoryId, Value=Category Id. 在Data.zh-CN.resx,你会有Name=CategoryId, Value=类别.

如果您拥有资源文件中的数据,您可能希望创建一个类来包装您在应用程序中的 XML 查找和本地化功能。像这样的东西应该工作:

public class Data
{
    private const string fileLocation = "TODO";

    public string Name{ get; set; }
    public string Value{ get; set; }

    private Data()
    {

    }

    public Data( string Name )
    {
        // TODO: Look up the single key from XML
    }

    public string GetLocalizedName( CultureInfo cultureInfo )
    {
        return Resources.Data.ResourceManager.GetString(Name, cultureInfo);
    }

    public static List<Data> LoadData()
    {
        List<Data> dataList = new List<Data>();

       // TODO: Load XML and create a list of Data objects.

        return dataList;
    }
}
于 2010-06-14T19:44:42.437 回答
-1

尝试以下步骤:

第 1 步 - 从

C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET 文件

第 2 步 - 清理并重建您的解决方案。

第 3 步 - 确保 App_LocalResources 文件夹中的资源文件与存在此问题的页面同名(并且 App_LocalResources 和页面都在同一个文件夹中)。

你的应用程序应该没问题。

http://iymbas.blogspot.com

于 2011-07-13T02:56:02.143 回答