2012-08-29 12 views
6

Vorrei caricare il ErrorMessage per il mio CustomValidator da un file di risorse.Come caricare un messaggio di errore su un CustomValidator da un file di risorse?

Ho il mio CustomValidator impostato in questo modo:

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

E il mio metodo di convalida è il seguente:

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

La convalida funziona correttamente, ma vorrei avere la ErrorMessage essere tirato dal mio file delle risorse locali.

EDIT: Sono anche curioso di sapere se esiste un modo per farlo utilizzando meta:resourcekey.

risposta

10

a patto di avere una risorsa locale per la vostra pagina (o di controllo), questo sarebbe il modo per farlo

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

Nel caso in cui si ottiene il testo da un file risorsa globale si dovrebbe fare qualcosa di simile

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

Dove Strings è il nome del file. Questo approccio è chiamato localizzazione esplicita.

EDIT

È possibile utilizzare meta:resourcekey. Questo è chiamato localizzazione implicita. Avrai bisogno di avere risorse locali poiché questo approccio non è valido per le risorse globali.

  1. Assicurarsi di avere file locali di risorse (file resx) che soddisfano i seguenti criteri:

    • Sono in una cartella App_LocalResources.

    • Il nome di base corrisponde al nome della pagina.

    Per esempio, se si lavora con la pagina denominata Default.aspx, i file di risorse sono chiamati default.aspx.resx (per le risorse di default), Default.aspx.es.resx, Default.aspx .es-mx.resx e così via.

    • Le risorse nel file utilizzano la chiave delle risorse della convenzione di denominazione. "Proprietà".

    Ad esempio, il nome tasto Pulsante1 "Testo".

  2. Nella marcatura di controllo, aggiungere un attributo di localizzazione implicita.

    Ad esempio:

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

Fonte : MSDN

1

Se si desidera eseguire il code-behind, è possibile utilizzare il seguente:

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; 
    } 
} 
Problemi correlati