我使用asp.net 3.5,我的解决方案目前有2个项目,一个API类项目和一个网站项目,该项目类中我有一个名为checkin.resx资源文件。对我来说,能够从我的网站访问项目的资源文件,我不得不设置“访问修饰符”公众,这允许我使用强类型的名称存取权限的资源,例如:CkiApi.Checkin.Resources.Checkin.OCKI_HeaderText,其中签是.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' 没有被发现。

但不管是什么我设置的类名来,我得到了同样的错误,我想它的,因为它试图在网站项目看,但我无法弄清楚如何告诉它看API !谁能帮助?

我能够使用以下来设置非服务器侧标记:

<div id="OckiIntroText">
    <%=CkiApi.Checkin.Resources.Checkin.OCKI_IntroText%>
</div>
有帮助吗?

解决方案

资源表达式(<%$ Resources: ClassKey, ResourceKey %>)使用 ResourceExpressionBuilder 幕后类。这个类只能查找全球和本地资源(在网站的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);
   }
}

添加以下的System.Web /编译部在web.config中:

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

最后,你可以打电话到您的.resx文件生成的强类型的类:

<asp:Label ID="Label1" runat="server" Text="<%$ Code: ClassLibrary1.Resource1.String1 %>" />

其他提示

不知道这是否会解决你的问题,但你看了的 HttpContext.GetGlobalResourceObject 方法?

我用它来访问资源,在web项目,从类库的框架项目 - 所以也许你会有好运围绕使用它的其他方式

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top