Ah; there is a gotcha.  There appears to be a convention that the type
being validated (that I'm putting into the property-bag) needs to have
a key like {key-for-data}Type.  So if I have a UserDto that I want to
validate, and its data-bind prefix is "user", the type that I chuck
into the PropertyBag needs to be keyed "userType".

Pete

On Oct 7, 11:07 pm, petemounce <[EMAIL PROTECTED]> wrote:
> What I ended up doing was this:
>
>         public class ValidationSetupFilter : IFilter
>         {
>                 public bool Perform(ExecuteWhen exec, IEngineContext context,
> IController controller,
>                                     IControllerContext controllerContext)
>                 {
>                         if (exec == ExecuteWhen.BeforeAction)
>                         {
>                                 // TODO: cache this System.Reflection use
>                                 var methods =
> controller.GetType().GetMethods(BindingFlags.Instance |
> BindingFlags.Public);
>                                 foreach (var info in methods)
>                                 {
>                                         var attrs = 
> info.GetCustomAttributes(typeof
> (SetupValidationForAttribute), true);
>                                         foreach (SetupValidationForAttribute 
> attr in attrs)
>                                         {
>                                                 
> controllerContext.PropertyBag[attr.Key] = attr.TypeToValidate;
>                                         }
>                                 }
>                         }
>                         return true;
>                 }
>         }
>
>         [AttributeUsage(AttributeTargets.Method, AllowMultiple = false,
> Inherited = true)]
>         public class SetupValidationForAttribute : Attribute
>         {
>                 public Type TypeToValidate { get; set; }
>                 public string Key { get; set; }
>
>                 public SetupValidationForAttribute(Type typeToValidate, string
> keyInPropertyBag)
>                 {
>                         TypeToValidate = typeToValidate;
>                         Key = keyInPropertyBag;
>                 }
>         }
>
> and then decorating controller actions where I need a type to be in
> the property bag with the SetupValidationFor attribute.  It worked ok,
> though a way of caching the reflection would be an improvement I
> guess.
>
> I was going to try to do something similar to handle my server-side
> validation (for example if JS is turned off, and later for more
> business-rule-oriented stuff), but I don't think there's a way to get
> at an action's parameter-values from a Filter, so I guess my other
> option is an Interceptor with the IoC container.
>
> On Oct 7, 9:44 pm, Gauthier Segay <[EMAIL PROTECTED]> wrote:
>
> > > I have one question, however.  I have an authentication-status shared
> > > partial view that lives in my layout, and contains a form that posts
> > > to my home-controller.  However, it's possible that this sign-in form
> > > could be rendered on a controller other than home.  So how best to
> > > furnish it with a typeof(UserAuthenticationDto) so that validation can
> > > happen for it - in a Filter?  That gets me to thinking it might be a
> > > fun thing to introduce a TypesNeededForValidationFigurerOuterFilter
> > > ( ;-)  ) that will look at the action being performed, and figure out
> > > whether it needs to put a DTO-type into the PropertyBag, and which
> > > type it needs to be - I suppose this might be facilitated by an
> > > Attribute on the action that takes a type as argument....?  How does
> > > that sound?
>
> > I've hacked this by having strong typed dictionary adapter interfaces
> > that all inherit IBaseViewModel (my base holder for view properties),
> > then using a dedicated method to create the dictionary adapter that
> > check if the type is IBaseViewModel then populate the required
> > properties.
>
> > This isn't free of shortcommings, but it fits the purpose for me.
>
> > What you are describing with filters and action attributes seems
> > interesting but I haven't had time to investigate such solution.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Castle Project Users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/castle-project-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to