ASP.NET HttpContext.GetLocalResourceObject()抛出InvalidOperationException

Mou*_*Lin 1 asp.net resources resx

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

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' />
Run Code Online (Sandbox Code Playgroud)

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

所以我想我可以data.xml.??-??.resxApp_LocalResources文件夹中的模式" " 之后创建一些文件,然后使用HttpContext.GetLocalResource()for each data.xml来检索本地化的密钥名称.这样我就不需要自己阅读xml了.可能吗?

Cla*_*edi 5

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

来自MSDN

全局资源文件

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

本地资源文件

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

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

    Button1.Text = 
        GetLocalResourceObject("Button1.Text").ToString();
    Image1.ImageUrl = 
        (String)GetGlobalResourceObject(
        "WebResourcesGlobal", "LogoUrl");
    Image1.Visible = true;
Run Code Online (Sandbox Code Playgroud)