http://stackoverflow.com/questions/24439997/nancy-decimal-property-binding-not-working
Oh noes! ---> Nancy.ModelBinding.ModelBindingException: Unable to bind to type: Nancy.Models.SomeModel
at Nancy.ModelBinding.DefaultBinder.Bind(NancyContext context, Type modelType, Object instance, BindingConfig configuration, String[] blackList)
at Nancy.ModelBinding.DynamicModelBinderAdapter.TryConvert(ConvertBinder binder, Object& result)
at CallSite.Target(Closure , CallSite , Object )
at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)
at Nancy.ModelBinding.ModuleExtensions.Bind[TModel](INancyModule module)
at KBZServisNancy.Modules.SomeModule.<.ctor>b__2(Object x) in d:\Nancy\Modules\SomeDecimalModule.cs:line 38
at CallSite.Target(Closure , CallSite , Func`2 , Object )
at Nancy.Routing.Route.<>c__DisplayClass4.b__3(Object parameters, CancellationToken context)
--- End of inner exception stack trace ---
at Nancy.NancyEngine.InvokeOnErrorHook(NancyContext context, ErrorPipeline pipeline, Exception ex)
at Nancy.NancyEngine.InvokeOnErrorHook(NancyContext context, ErrorPipeline pipeline, Exception ex)
ΠΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ ΠΎΡΠΈΠ±ΠΊΠ°, ΡΠ°ΠΌ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°Π» Ρ ΠΌΠ°ΡΡΡΡΡΠΎΠΌ ΠΈ Π΄Π΅ΡΡΡΠΈΡΠ½ΠΎΠΉ Π΄ΡΠΎΠ±ΡΡ ΠΈ ΠΏΠΎΠ»ΡΡΠΈΠ» ΡΠ°ΠΊΠΎΠ΅ ΠΆΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
DecimalConverter.ConvertFrom ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΊΡΠ»ΡΡΡΡΡ, ΠΎΠ½ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ Β«1,1Β» Π²ΠΌΠ΅ΡΡΠΎ Β«1,1Β» Π² ΡΡΡΠ΅ΡΠΊΠΎΠΉ ΠΊΡΠ»ΡΡΡΡΠ΅. Π Π΅Π·Π΅ΡΠ²Π½Π°Ρ ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ConvertFrom Ρ InvariantCulture. ΠΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ Π½Π° Π²ΡΡΡΠ³ΠΈΠ²Π°Π½ΠΈΠ΅?
ΠΡΠΎΡΡΠΎ Π½Π°ΠΏΠΈΡΠΈΡΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ITypeConverter
`` Π‘ #
///
/// ΠΠΎΠ½Π²Π΅ΡΡΠ΅Ρ Nancy Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΡΠ»ΠΎΠ²ΡΡ
ΡΠΈΠΏΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ InvariantCulture.
///
ΠΎΡΠΊΡΡΡΡΠΉ ΠΊΠ»Π°ΡΡ NancyNumericConverter: ITypeConverter
{
public bool CanConvertTo (ΡΠΈΠΏ destinationType, ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ BindingContext)
{
Π²Π΅ΡΠ½ΡΡΡ destinationType.IsNumeric ();
}
public object Convert(string input, Type destinationType, BindingContext context)
{
if (string.IsNullOrEmpty(input))
{
return null;
}
return System.Convert.ChangeType(input, destinationType, CultureInfo.InvariantCulture);
}
}
`` ''
ΠΡΠΎΡΡΠΎ Π½Π°ΠΏΠΈΡΠΈΡΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ
ITypeConverter
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ!
ΠΠΎ ΠΏΠΎΡ
ΠΎΠΆΠ΅, ΡΡΠΎ System.Convert.ChangeType
Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΈΠΏΡ, Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ NULL.
ΠΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Nullable.GetUnderlyingType
Π²ΠΎΡ ΡΠ°ΠΊ:
/// <summary>
/// Nancy converter to convert numeric types with InvariantCulture.
/// </summary>
public class InvariantCultureNumericConverter : ITypeConverter
{
public bool CanConvertTo(Type destinationType, BindingContext context)
{
return destinationType.IsNumeric();
}
public object Convert(string input, Type destinationType, BindingContext context)
{
if (string.IsNullOrEmpty(input))
{
return null;
}
destinationType = Nullable.GetUnderlyingType(destinationType) ?? destinationType;
return System.Convert.ChangeType(input, destinationType, CultureInfo.InvariantCulture);
}
}
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΡΠΎΡΡΠΎ Π½Π°ΠΏΠΈΡΠΈΡΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ
ITypeConverter
`` Π‘ #
///
/// ΠΠΎΠ½Π²Π΅ΡΡΠ΅Ρ Nancy Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΡΠ»ΠΎΠ²ΡΡ ΡΠΈΠΏΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ InvariantCulture.
///
ΠΎΡΠΊΡΡΡΡΠΉ ΠΊΠ»Π°ΡΡ NancyNumericConverter: ITypeConverter
{
public bool CanConvertTo (ΡΠΈΠΏ destinationType, ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ BindingContext)
{
Π²Π΅ΡΠ½ΡΡΡ destinationType.IsNumeric ();
}
`` ''