I'm using asp.net 3.5, my solution currently has 2 projects, an API class project and a website project, within the class project I have a resource file named checkin.resx. For me to be able to access the resource files from my website project, I had to set the "Access Modifier" to public, this allowed me to use a strongly typed name to acces the resources for example: CkiApi.Checkin.Resources.Checkin.OCKI_HeaderText
, where Checkin is the .resx file and OCKI_HeaderText is the resource key.
The problem I'm facing is that I'm unable to access the resources from front end aspx code, for example, setting a text property of a label or a validation error message. I have tried the following syntax to no avail:
<asp:Label AssociatedControlID="IdentMethods" EnableViewState="false" ID="lblIdentMethod" runat="server" Text="<%$ Resources: CkiApi.Checkin.Resources.Checkin, OCKI_IdentificationMethod %>"></asp:Label>
the error I get is
The resource object with key 'OCKI_IdentificationMethod' was not found.
but regardless of what I set the class name to, I get the same error, I'm thinking its because its trying to look in the website project but I can't figure out how to tell it to look at the API! Can anyone help?
I am able to set non server side tags using the following:
<div id="OckiIntroText">
<%=CkiApi.Checkin.Resources.Checkin.OCKI_IntroText%>
</div>
Best Answer
Resource expressions (
<%$ Resources: ClassKey, ResourceKey %>
) use ResourceExpressionBuilder class behind the scene. This class can lookup global and local resources only (in website'sApp_GlobalResources
andApp_LocalResources
folders).Instead, you can use CodeExpressionBuilder class to access resources from different project. Here's how to use it.
Add CodeExpressionBuilder class to App_Code folder:
Add the following to system.web/compilation section in web.config:
Finally, you can call into strongly-typed class generated for your .resx file: