2009-08-03 13 views
15

Estoy usando asp.net 3.5, mi solución actualmente tiene 2 proyectos, un proyecto de clase API y un proyecto de sitio web, dentro del proyecto de clase tengo un archivo de recursos llamado checkin.resx. Para poder acceder a los archivos de recursos de mi proyecto de sitio web, tuve que configurar el "Modificador de acceso" en público, esto me permitió usar un nombre fuertemente tipado para acceder a los recursos, por ejemplo: CkiApi.Checkin.Resources.Checkin.OCKI_HeaderText, donde Checkin es el. el archivo resx y OCKI_HeaderText es la clave de recursos.Acceder a los archivos de recursos de resx desde otro proyecto

El problema al que me enfrento es que no puedo acceder a los recursos del código aspx frontal, por ejemplo, establecer una propiedad de texto de una etiqueta o un mensaje de error de validación. He tratado de la siguiente sintaxis en vano:

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

el error que consigo es

El objeto del recurso con la tecla 'OCKI_IdentificationMethod' no fue encontrada.

pero independientemente de lo que haya establecido el nombre de clase, me sale el mismo error, estoy pensando que es porque está tratando de buscar en el proyecto del sitio web pero no puedo ver cómo decirlo en la API! ¿Alguien puede ayudar?

soy capaz de establecer las etiquetas del lado del servidor no utilizando la siguiente:

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

Respuesta

17

Expresiones de recursos (<%$ Resources: ClassKey, ResourceKey %>) usan la clase ResourceExpressionBuilder detrás de la escena. Esta clase solo puede buscar recursos globales y locales (en las carpetas App_GlobalResources y App_LocalResources del sitio web).

En su lugar, puede utilizar la clase CodeExpressionBuilder para acceder a recursos de diferentes proyectos. He aquí cómo usarlo.

Añadir a la clase CodeExpressionBuilder App_Code carpeta:

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); 
    } 
} 

Agregue lo siguiente a la sección system.web/compilación en web.config:

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

Por último, puede llamar a la clase inflexible de tipos generado para su archivo .resx:

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

No estoy seguro si esto va a resolver su problema pero ¿ha mirado el método HttpContext.GetGlobalResourceObject?

Lo he usado para acceder a recursos en el proyecto web, desde bibliotecas de clases en un proyecto de marco, así que quizás tengas suerte al usarlo al revés.

+0

Gracias por su respuesta, pero desafortunadamente CREO este functionalit y es lo mismo que usar <% $ Resources: , %>, también, no podría vincular las etiquetas <% = o <% # a un atributo del lado del servidor :( – Raj

Cuestiones relacionadas