2010-03-21 11 views
5

Sto cercando di creare una versione personalizzata di RequiredAttribute per sostituire quella incorporata e ho funzionato per le proprietà che ad esempio, con proprietà DateTime o integer, il RequiredAttribute predefinito sembra essere applicato automaticamente (SE la proprietà non è annullabile!)DatiAnnotazioni in ASP.NET MVC 2 - Interrompi MVC dall'applicare RequiredAttribute alle proprietà DateTime ecc. Nullabile

Il mio problema è che voglio essere in grado di specificare una proprietà DateTime come richiesto utilizzando il mio validatore personalizzato richiesto che ottiene il messaggio di errore da un file di risorse (non voglio dover dire al RequiredAttribute il tipo di file di risorse e la chiave ogni volta che lo applico. Ecco perché sto facendo uno personalizzato.)

Come posso impedire al framework di applicare l'attributo richiesto alle proprietà di tipo DateTime e int ecc. senza cambiandole in null.

Grazie

risposta

10

trovato! Ho messo questo nei Global.asax.cs presentare

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false; 

La classe DataAnnotationsModelValidatorProvider ha una proprietà statica denominata "AddImplicitRequiredAttributeForValueTypes" che per default deve essere vero, e impostarla su false risolto il problema.

(per chi cerca di fare lo stesso tipo di cose che trova questa voce, mi sto documentando che here)

+0

Bello, sto solo mettendo le mani sulle annotazioni dei dati e penso che sarà presto utile. – mare

+0

@mare: Ho appena aggiunto un collegamento a un post di blog che sto facendo che descrive un po 'di più su cosa stavo facendo e come sbarazzarmi di alcuni altri problemi di convalida predefiniti (come i campi numerici che hanno un altro messaggio in inglese che io voglio localizzare!) – jwwishart

1

ho installato RTM e non avete la proprietà AddImplicitRequiredAttributeForValueTypes ...

+0

Quindi hai lo spazio dei nomi richiesto per vedere la classe DataAnnotationsModelValidatorProvider in ambito (System.Web.Mvc) e non puoi vedere la proprietà? Si noti che la proprietà è statica, quindi non provare e instanciate un'istanza di DataAnnotationsModelValidatorProvider! Questo aiuta o è qualcos'altro? – jwwishart