2010-11-24 49 views
6

Model bağlama sırasında erişilebilecek HttpContext öğelerinde bir değer ekleyen özel eylem filtresi özniteliği oluşturmak istiyorum.ASP.NET MVC ActionFilterAttribute, model bağlamadan önce değeri enjekte

OnActionExecuting içine eklemeye çalıştım ancak model bağlama işleminin filtreden önce göründüğü görünüyor.

Bunu nasıl yapabileceğimiz hakkında bir fikrin var mı? Belki de, model filtrede, filtreden sonra işlenecek olan ve filtrem tarafından enjekte edilen değeri kullanan geçersiz kılma yöntemidir. Yapmak istediğim ne

, bu nvalid.net (www.nvalid.net) 'dir, bir doğrulama bağlamı (ı doğrulama için kullanmak kütüphane bağlamını destekler enjekte etmektir

Ben yerleştirmek mümkün olmak istiyorum

bir özellik böyle benim ActionResult yöntemi

[ValidationContext("Prevalidation")] 

, benim özel modeli ciltteki oluşur doğrulama doğrulama yaparken kullanmak üzere hangi bağlam biliyor diye.

sadece yapamaz yüzden bu özel model bir bağlayıcı

cevap

3

Neden özel bir model ciltleyici yazmıyor ve BindModel yönteminde çalışıyorsunuz?

4

Bunu başarmanın bir yolunu buldum. yansıması olarak

public class ModelBinder : DefaultModelBinder 
{ 
    protected override void OnModelUpdated(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     var actionName = controllerContext.RouteData.Values["action"] != null 
           ? controllerContext.RouteData.Values["action"].ToString() 
           : string.Empty; 

     var attribute = controllerContext.Controller.GetType().GetMethods() 
      .Where(x => x.Name == actionName) 
      .Where(x => x.GetCustomAttributes(false).Any(a => a.GetType() == typeof(CustomActionFilterAttribute))) 
      .Select(x => x.GetCustomAttributes(typeof(CustomActionFilterAttribute), false).FirstOrDefault()) 
      .FirstOrDefault() as CustomActionFilterAttribute; 

     if(attribute != null && attribute.AnyProperty) 
     { 
      // Do what you want 
     } 
    } 
} 

ben ayrıntısını bulmak ve benim ModelBinder içinde kullanabilirsiniz

İlgili konular