JimmiTh's comment sulla questione ha fornito un'intuizione fondamentale per me per risolvere questo per me stesso.
Nel mio caso, ho sicuramente aggiunto un provider aggiuntivo a ModelValidatorProviders
. Ho aggiunto una fabbrica di convalida personalizzato (utilizzando Fluent Validation) con questo codice nel mio file Global.asax.cs:
ModelValidatorProviders.Providers.Add(
new FluentValidationModelValidatorProvider(validatorFactory));
Ma usando diversi operatori di non è necessariamente problematico. Ciò che sembra essere problematico è se più provider forniscono gli stessi validatori, poiché registreranno le stesse regole più volte, causando il problema menzionato con il codice di convalida discreto di Microsoft.
ho finito di rimuovere la seguente riga dallo stesso file come ho deciso che non ho avuto bisogno di usare entrambi i fornitori:
FluentValidationModelValidatorProvider.Configure();
Il metodo Configure
di cui sopra è in sé l'aggiunta di un provider a ModelValidatorProviders
, e io ero registrare efficacemente la stessa classe di validatori due volte, da cui l'errore relativo ai "nomi dei tipi di convalida" non univoci.
La domanda SO jquery - Fluent Validations. Error: Validation type names in unobtrusive client validation rules must be unique indica un altro modo in cui l'utilizzo di più provider può portare al problema menzionato. Ogni provider può essere configurato per aggiungere un 'attributo implicito richiesto a' tipi di valore '(ad esempio, visualizzare le proprietà del modello che non sono annullabili). Per risolvere questo problema particolare, ho potuto cambiare il mio codice di seguito in modo che nessuno dei fornitori aggiungere impliciti attributi richiesti:
FluentValidationModelValidatorProvider.Configure(
provider => provider.AddImplicitRequiredValidator = false);
DependencyResolverValidatorFactory validatorFactory =
new DependencyResolverValidatorFactory();
FluentValidationModelValidatorProvider validatorFactoryProvider =
new FluentValidationModelValidatorProvider(validatorFactory);
validatorFactoryProvider.AddImplicitRequiredValidator = false;
ModelValidatorProviders.Providers.Add(validatorFactoryProvider);
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
fonte
2014-03-28 17:33:04
Sto anche utilizzando le estensioni di dataannotations e non ho alcun problema. L'unica differenza che vedo è che hai l'attributo "AdditionalMetadata" in uso che non ho mai usato. Prova a rimuoverlo e vedere se ha ancora errori? –
Nessuna fortuna. Questo codice ha funzionato bene prima (non ho cambiato questo modello). Funziona bene localmente, solo non quando è distribuito sul server. –
Ho trovato questo link, potrebbe far luce. http://fluentvalidation.codeplex.com/workitem/7072 –