从另一个项目访问的resx资源文件
题
我使用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_GlobalResources
和App_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项目,从类库的框架项目 - 所以也许你会有好运围绕使用它的其他方式