16

私はasp.net 3.5を使用しています。私のソリューションには現在、APIクラスプロジェクトとWebサイトプロジェクトの2つのプロジェクトがあり、クラスプロジェクト内にcheckin.resxという名前のリソースファイルがあります。Web サイト プロジェクトからリソース ファイルにアクセスできるようにするには、「アクセス修飾子」をパブリックに設定する必要がありました。これにより、厳密に型指定された名前を使用してリソースにアクセスできるようになりました。たとえばCkiApi.Checkin.Resources.Checkin.OCKI_HeaderText、Checkin は .resx です。ファイルであり、OCKI_HeaderText はリソース キーです。

私が直面している問題は、ラベルのテキスト プロパティや検証エラー メッセージの設定など、フロント エンドの aspx コードからリソースにアクセスできないことです。次の構文を試してみましたが、役に立ちませんでした。

<asp:Label AssociatedControlID="IdentMethods" EnableViewState="false" ID="lblIdentMethod" runat="server" Text="<%$ Resources: CkiApi.Checkin.Resources.Checkin, OCKI_IdentificationMethod %>"></asp:Label>

私が得るエラーは

キー「OCKI_IdentificationMethod」を持つリソース オブジェクトが見つかりませんでした。

しかし、クラス名の設定に関係なく、同じエラーが発生します。これは、Web サイト プロジェクトを調べようとしているのだと考えていますが、API を調べるように指示する方法がわかりません! 誰でも助けることができますか?

次を使用して、サーバー側以外のタグを設定できます。

<div id="OckiIntroText">
    <%=CkiApi.Checkin.Resources.Checkin.OCKI_IntroText%>
</div>
4

2 に答える 2

18

リソース式 ( <%$ Resources: ClassKey, ResourceKey %>) は、バックグラウンドでResourceExpressionBuilderクラスを使用します。このクラスは、グローバル リソースとローカル リソースのみを検索できます (Web サイトApp_GlobalResourcesApp_LocalResourcesフォルダー内)。

代わりに、CodeExpressionBuilderクラスを使用して、別のプロジェクトのリソースにアクセスできます。使用方法は次のとおりです。

CodeExpressionBuilder クラスを App_Code フォルダーに追加します。

using System.CodeDom;
using System.Web.Compilation;
using System.Web.UI;

[ExpressionPrefix("Code")]
public class CodeExpressionBuilder : ExpressionBuilder
{
   public override CodeExpression GetCodeExpression(BoundPropertyEntry entry,
      object parsedData, ExpressionBuilderContext context)
   {
      return new CodeSnippetExpression(entry.Expression);
   }
}

web.config の system.web/compilation セクションに次を追加します。

<compilation debug="false">
   ...
   <expressionBuilders>
      <add expressionPrefix="Code" type="CodeExpressionBuilder"/>
   </expressionBuilders>
</compilation>

最後に、.resx ファイル用に生成された厳密に型指定されたクラスを呼び出すことができます。

<asp:Label ID="Label1" runat="server" Text="<%$ Code: ClassLibrary1.Resource1.String1 %>" />
于 2009-08-04T06:45:03.980 に答える
3

これで問題が解決するかどうかはわかりませんが、HttpContext.GetGlobalResourceObjectメソッドを確認しましたか?

フレームワークプロジェクトのクラスライブラリから、Webプロジェクトのリソースにアクセスするために使用しました。そのため、逆に使用すると幸運になるでしょう。

于 2009-08-03T14:16:14.053 に答える