2012-08-29 17 views
6

Me gustaría cargar el ErrorMessage para mi CustomValidator desde un archivo de recursos.¿Cómo puedo cargar un ErrorMessage en un CustomValidator desde un archivo de recursos?

tengo mi CustomValidator configurado de este modo:

<asp:CustomValidator ID="cv1" runat="server" ControlToValidate="txt1" 
     ErrorMessage="TEXT TO BE LOCALIZED" OnServerValidate="cv1_Validate" /> 

Y mi método de validación es el siguiente:

protected void cv1_Validate(object source, ServerValidateEventArgs e) 
{ 
    if (FalseCondition) 
    { 
     e.IsValid = false; 
    } 
    else 
    { 
     e.IsValid = true; 
    } 
} 

La validación funciona correctamente, pero me gustaría tener la ErrorMessage ser arrastrado de mi archivo de recursos locales.

EDIT: También tengo curiosidad si hay alguna manera de hacer esto usando meta:resourcekey.

Respuesta

10

suponiendo que tiene un recurso local para su página (o control), esta sería la manera de hacerlo

ErrorMessage="<%$ resources:ResourceName %>" 

En caso de que obtiene el texto de un archivo de recursos global que debe hacer algo como esto

ErrorMessage="<%$ resources:Strings, ResourceName %>" 

Dónde Strings es el nombre del archivo. Este enfoque se llama localización explícita.

EDITAR

Puede utilizar meta:resourcekey. Esto se llama localización implícita. Necesitará tener recursos locales ya que este enfoque no es válido para recursos globales.

  1. Asegúrese de que tiene los archivos locales de recursos (.resx) que cumplan con los siguientes criterios:

    • Ellos están en una carpeta App_LocalResources.

    • El nombre base coincide con el nombre de la página.

    Por ejemplo, si se está trabajando con la página Default.aspx llamado, los archivos de recursos se nombran Default.aspx.resx (para los recursos por defecto), Default.aspx.es.resx, Default.aspx .es-mx.resx, y así sucesivamente.

    • Los recursos en el archivo utilizan la convención de nomenclatura resourcekey. "Propiedad".

    Por ejemplo, nombre de la tecla Botón1. "Texto".

  2. En el marcado de control, agregue un atributo de localización implícita.

    Por ejemplo:

    < asp: Button ID = "Button1" runat = "server" Text = "DefaultText" meta: ResourceKey = "Button1"/>

Fuente : MSDN

1

Si desea hacerlo en el código subyacente, puede usar lo siguiente:

ResourceManager resmgr = new ResourceManager("YourApplication.YourBaseResourceFile ", 
           Assembly.GetExecutingAssembly()); 

protected void cv1_Validate(object source, ServerValidateEventArgs e) 
{ 

if (FalseCondition) 
    { 
     CultureInfo ci = Thread.CurrentThread.CurrentCulture;  
     String str = resmgr.GetString("Error Msg Key in Resource File"); 
     cv1.ErrorMessage =str;  
     e.IsValid = false; 
    }  
else 
    { 
    e.IsValid = true; 
    } 
} 
Cuestiones relacionadas