c# - Comma decimal separator is ignored by ASP.NET MVC model binder -


120,12 http request converted 12012 in double model. read asp.net mvc should handle such things couldn't make work

request:

accept-language:da,en;q=0.8,ru;q=0.6,en-us;q=0.4 ... price: "120,12" 

action method' model contains: public double price { get; set; }

inside action:

var uiculture = thread.currentthread.currentuiculture; // {da} var culture = thread.currentthread.currentculture; // {da-dk} 

localization controlled in global.asax inside application_acquirerequeststate:

var cultureinfo = new cultureinfo("da");  thread.currentthread.currentuiculture = cultureinfo; thread.currentthread.currentculture = cultureinfo.createspecificculture(cultureinfo.name); 

thanks in advance help!

you can write custom model binder.

    public class decimalmodelbinder : imodelbinder     {         public object bindmodel(controllercontext controllercontext,             modelbindingcontext bindingcontext)         {             var valueresult = bindingcontext.valueprovider                 .getvalue(bindingcontext.modelname);             var modelstate = new modelstate {value = valueresult};             object actualvalue = null;             try             {                 //check if nullable decimal , null or empty string has been passed                 var isnullableandnull = (bindingcontext.modelmetadata.isnullablevaluetype &&                                           string.isnullorempty(valueresult.attemptedvalue));                  //if not nullable , null should try , parse decimal                 if (!isnullableandnull)                 {                     actualvalue = decimal.parse(valueresult.attemptedvalue, numberstyles.any, cultureinfo.currentculture);                 }             }             catch (formatexception e)             {                 modelstate.errors.add(e);             }              bindingcontext.modelstate.add(bindingcontext.modelname, modelstate);             return actualvalue;         }     } } 

just change cultureinfo.currentculture of 1 user has selected in decimal.parse statement. register new modelbinder @ startup.


Comments