クライアント側で動作するカスタムバリデーターを取得できません。 JS側でこれらのメソッドを追加しますASP.NET Core 1.1でFluent Validationを使用したカスタムバリデータを使用
// Register Simple Injector validation factory in FV
FluentValidationModelValidatorProvider.Configure(provider =>
{
provider.ValidatorFactory = new ApplicationValidatorFactory(container);
provider.AddImplicitRequiredValidator = false;
provider.Add(typeof(UniqueEmailValidator),
(m, c, d, v) => new UniqueEmailPropertyValidator(m, c, d, v));
provider.Add(typeof(UniqueUsernameValidator),
(m, c, d, v) => new UniqueUsernamePropertyValidator(m, c, d, v));
provider.Add(typeof(StringNoSpacesValidator),
(m, c, d, v) => new StringNoSpacesPropertyValidator(m, c, d, v));
provider.Add(typeof(PasswordStrengthValidator),
(m, c, d, v) => new PasswordStrengthPropertyValidator(m, c, d, v));
});
:
をvar assemblies = AppDomain.CurrentDomain.GetAssemblies().ToList();
container.Register<IValidatorFactory, ApplicationValidatorFactory>(Lifestyle.Singleton);
container.Register(typeof(IValidator<>), assemblies);
container.RegisterConditional(typeof(IValidator<>),
typeof(ValidateNothingDecorator<>),
Lifestyle.Singleton,
context => !context.Handled);
とすべてのカスタムバリデータを登録します。ASP.NET MVC5で、私はvalidatiorsを登録するシンプルインジェクタを使用するために使用されます
jQuery.validator.addMethod("nospaces", function(value, element) {
return value.indexOf(" ") < 0 && value != "";
}, language.username_has_spaces);
jQuery.validator.unobtrusive.adapters.add("nospaces", function (options) {
options.rules["nospaces"] = true;
if (options.message) {
options.messages["nospaces"] = options.message;
}
});
jQuery.validator.unobtrusive.adapters.add("passwordmeter", function (options) {
options.rules["passwordmeter"] = true;
if (options.message) {
options.messages["passwordmeter"] = options.message;
}
});
それだけです!それは完璧に働いた!
ASP.NET Core 1.1ではどうすればよいですか?
私はMicrosoftのDIを使用して、それを登録するには言及ドキュメント続いています
services.AddMvc().AddFluentValidation(
fv => fv.RegisterValidatorsFromAssemblyContaining<Startup>());
をしかし、それはいくつかの問題があります。
- は、カスタムバリデータは、クライアント上で動作させることはできませんが(組み込み既に有効なSimpleInjectorに登録されているカスタムバリデーター内で使用されるサービスは、MicrosoftのDIを使用して1つずつ再度登録する必要があります。
services.AddTransient<IUserRegistrationService, UserRegistrationService>();