asp.net mvc - Get custom attribute for parameter when model binding -


i've seen lot of similar posts on this, haven't found answer specific controller parameters.

i've written custom attribute called aliasattribute allows me define aliases parameters during model binding. example if have: public jsonresult emailcheck(string email) on server , want email parameter bound fields named primaryemail or somecrazyemail can "map" using aliasattribute this: public jsonresult emailcheck([alias(suffix = "email")]string email).

the problem: in custom model binder can't hold of aliasattribute class applied email parameter. returns null. i've seen defaultmodelbinder class doing bindattribute in reflector , same doesn't work me.

question: how attribute during binding?

aliasmodelbinder:

public class aliasmodelbinder : defaultmodelbinder {     public static icustomtypedescriptor gettypedescriptor(type type)     {         return new associatedmetadatatypetypedescriptionprovider(type).gettypedescriptor(type);     }      public override object bindmodel(controllercontext controllercontext, modelbindingcontext bindingcontext)     {         var value = base.bindmodel(controllercontext, bindingcontext);          var descriptor = gettypedescriptor(bindingcontext.modeltype);         /*************************/         // next statement returns null!         /*************************/         aliasattribute attr = (aliasattribute)descriptor.getattributes()[typeof(aliasattribute)];          if (attr == null)             return null;          httprequestbase request = controllercontext.httpcontext.request;          foreach (var key in request.form.allkeys)         {             if (string.isnullorempty(attr.prefix) == false)             {                 if (key.startswith(attr.prefix, stringcomparison.invariantcultureignorecase))                 {                     if (string.isnullorempty(attr.suffix) == false)                     {                         if (key.endswith(attr.suffix, stringcomparison.invariantcultureignorecase))                         {                             return request.form.get(key);                         }                     }                     return request.form.get(key);                 }             }             else if (string.isnullorempty(attr.suffix) == false)             {                 if (key.endswith(attr.suffix, stringcomparison.invariantcultureignorecase))                 {                     return request.form.get(key);                 }             }             if (attr.hasincludes)             {                 foreach (var include in attr.inlcludesplit)                 {                     if (key.equals(include, stringcomparison.invariantcultureignorecase))                     {                         return request.form.get(include);                     }                 }             }         }         return null;     } } 

aliasattribute:

[attributeusage(attributetargets.parameter | attributetargets.class, allowmultiple = false, inherited = true)] public class aliasattribute : attribute {     private string _include;     private string[] _inlcludesplit = new string[0];      public string prefix { get; set; }     public string suffix { get; set; }     public string include     {                 {             return _include;         }         set         {             _include = value;             _inlcludesplit = splitstring(_include);         }     }     public string[] inlcludesplit     {                 {             return _inlcludesplit;         }     }     public bool hasincludes { { return inlcludesplit.length > 0; } }       internal static string[] splitstring(string original)     {         if (string.isnullorempty(original))         {             return new string[0];         }         return (from piece in original.split(new char[] { ',' })                 let trimmed = piece.trim()                 !string.isnullorempty(trimmed)                 select trimmed).toarray<string>();     } } 

usage:

public jsonresult emailcheck([modelbinder(typeof(aliasmodelbinder)), alias(suffix = "email")]string email) {     // email assigned field suffixed "email". e.g. primaryemail, secondaryemail , on } 

gave on , stumbled across action parameter alias code base allow me this. it's not flexible started out write can modified allow wild cards.


Comments

Popular posts from this blog

assembly - 8086 TASM: Illegal Indexing Mode -

Java, LWJGL, OpenGL 1.1, decoding BufferedImage to Bytebuffer and binding to OpenGL across classes -

javascript - addthis share facebook and google+ url -