2012-09-22 13 views
21

Aggiunta di un file di risorse per App_GlobalResources con una chiave PropertyValueRequired e cambiando DefaultModelBinder.ResourceClassKey al nome del file non ha alcun effetto sulla MVC 4. La stringa The {0} field is required non è mai cambiato. Non voglio impostare il tipo di classe di risorsa e la chiave su ogni campo richiesto. Mi manca qualcosa?MVC 4 ignora DefaultModelBinder.ResourceClassKey

Edit:

Ho fatto una piccola modifica sul codice di Darin Dimitrov per mantenere richiesto personalizzazioni di lavoro:

public class MyRequiredAttributeAdapter : RequiredAttributeAdapter 
{ 
    public MyRequiredAttributeAdapter(
     ModelMetadata metadata, 
     ControllerContext context, 
     RequiredAttribute attribute 
    ) 
     : base(metadata, context, attribute) 
    { 
     if (attribute.ErrorMessageResourceType == null) 
     { 
      attribute.ErrorMessageResourceType = typeof(Messages); 
     } 
     if (attribute.ErrorMessageResourceName == null) 
     { 
      attribute.ErrorMessageResourceName = "PropertyValueRequired"; 
     } 
    } 
} 

risposta

39

Questo non è specifico per ASP.NET MVC 4. E 'stata la lo stesso in ASP.NET MVC 3. Non è possibile impostare il messaggio richiesto utilizzando DefaultModelBinder.ResourceClassKey, solo il PropertyValueInvalid.

Un modo per ottenere ciò che si sta cercando è quello di definire una consuetudine RequiredAttributeAdapter:

public class MyRequiredAttributeAdapter : RequiredAttributeAdapter 
{ 
    public MyRequiredAttributeAdapter(
     ModelMetadata metadata, 
     ControllerContext context, 
     RequiredAttribute attribute 
    ) : base(metadata, context, attribute) 
    { 
     attribute.ErrorMessageResourceType = typeof(Messages); 
     attribute.ErrorMessageResourceName = "PropertyValueRequired"; 
    } 
} 

che si iscriversi in Application_Start:

DataAnnotationsModelValidatorProvider.RegisterAdapter(
    typeof(RequiredAttribute), 
    typeof(MyRequiredAttributeAdapter) 
); 

Ora, quando un campo non annullabile non è assegnato un valore, il messaggio di errore verrà da Messages.PropertyValueRequired dove Messages.resx deve essere definito all'interno di App_GlobalResources.

+0

Perfetto! Ho fatto molte ricerche e non ho trovato nulla di simile. Grazie mille. – Eduardo

+0

@DarinDimitrov, la tua risposta è ottima, grazie .... – RAM

+0

È possibile fare qualcosa di simile per la convalida del tipo, ad es. per le date? – Rowan