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カルチャの場合は「CategoryId = 3」、zh-CNカルチャの場合は「クラスM=3」などを表示したいと思います。

したがって、フォルダー内にパターン " data.xml.??-??.resx"に従っていくつかのファイルを作成し、foreachdata.xmlを使用してローカライズされたキー名を取得できると思います。そうすれば、自分でxmlを読む必要はありません。出来ますか?App_LocalResourcesHttpContext.GetLocalResource()

4

3 に答える 3

5

それは、ローカル リソースが使用されることになっている方法ではありません。ローカル リソースは、ページまたはコントロールに対してのみ有効です。あなたの場合、グローバルリソースを使用する必要があります。

MSDNから

グローバル リソース ファイル

グローバル リソース ファイルを作成するには、アプリケーションのルートにある予約済みフォルダー App_GlobalResources に配置します。App_GlobalResources フォルダーにあるすべての .resx ファイルには、グローバル スコープがあります。さらに、ASP.NET は厳密に型指定されたオブジェクトを生成し、プログラムによってグローバル リソースに簡単にアクセスできるようにします。

ローカル リソース ファイル

ローカル リソース ファイルは、1 つの 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;
于 2010-06-08T12:48:20.130 に答える
3

Claudio Redi が推奨するように、グローバル リソース ファイルを使用します。

「filename.resx」の形式でxmlファイルごとに1つ作成するので、例ではData.resx.

リソースの「名前」を「名前」属性に設定し、値を翻訳された「名前」に設定します。

たとえば、 ではData.resxName=CategoryId, Value=Category Id. ではData.zh-CN.resxName=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 - Web サイトの一時ファイルを削除する

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 に答える