Statik kod yerine bir veri deposundan doğrulama özniteliklerinin ayarlanmasına izin vermek için özel bir sağlayıcı kurdum. .NET MVC 4 projemde istemci tarafında doğrulama ile harika çalışıyor, ancak sunucu tarafı doğrulaması çalışmasını alamıyorum.Özel DataAnnotationsModelValidatorProvider ile sunucu tarafı doğrulaması
CustomModelValidatorProvider .cs: Benim Global.asax.cs olarak
public class CustomModelValidatorProvider : DataAnnotationsModelValidatorProvider { protected override IEnumerable GetValidators(ModelMetadata metadata, ControllerContext context, IEnumerable attributes) { // set attributes from datastore here return base.GetValidators(metadata, context, attributes); } }
Ben:
protected void Application_Start() { ModelValidatorProviders.Providers.Clear(); ModelValidatorProviders.Providers.Add(new CustomModelValidatorProvider()); }
oysa benim bir Web API yönteminde
: Buradavar validationResultList = new List(); bool valid = Validator.TryValidateObject(myModelObject, new ValidationContext(myModelObject, null, null), validationResultList, true);
, geçerli her zaman doğrudur. Jquery istemci tarafı doğrulama bir hata görüntülediğinde bile. Sunucu tarafında, özel sağlayıcım veri ek açıklamalarını uygulamak için kullanılmıyor. GetValidators() uygulamasında bir kesme noktası ayarladığımda, Görünüm oluşturulduğunda ve istemci tarafı doğrulayıcılarını doğru şekilde görüntülediğinde çağrılır, ancak model denetleyiciye bağlı olduğunda yeniden çağrılmaz.
Bir adımı kaçırdım mı? Herhangi bir yardım büyük beğeni topluyor!
GÜNCELLEME
özel doğrulayıcı nesne Kontrolör gönderilen zaman düzgün çalışır, ancak bir ApiController gönderilen zaman ateş almaz.
Üzgünüz, bu sorunun sizin olduğunu anlayamadığınız diğer bir soruya yorum yazdım! Bildiğim kadarıyla, API denetleyicileri ve standart denetleyiciler ayrı model bağlayıcıları kullanırlar, böylece sorun doğrulayıcıyı doğru model bağlayıcıya doğru bir şekilde eklemez. Şu anda PC'mde değil ama daha sonra ona bir göz atacağım :) – Henry
@HenryGarle Evet, bunu test ettim ve bir denetleyiciye gönderildiğinde özel doğrulama işlemi çalışıyor, ama ApiController değil. ApiController için doğru şekilde nasıl kaydedileceğinden emin değilsiniz. – Dave
Tamam, bu iyi bir başlangıç, ModelValidatorProvider'dan miras alır mı? – Henry