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)
Sieht so aus, als wäre dies ein Fehler, habe es selbst mit einer Route und einer Dezimalzahl ausprobiert und die gleiche Ausnahme erhalten.
DecimalConverter.ConvertFrom wird im Kontext der aktuellen Kultur verwendet. Es erwartet "1,1" anstelle von "1.1" in der türkischen Kultur. Eine Fallback-Strategie kann implementiert werden, indem ConvertFrom mit InvariantCulture verwendet wird. Akzeptieren Sie Pull-Requests?
Schreiben Sie einfach eigene ITypeConverter
``` c#
///
/// Nancy-Konverter zum Konvertieren numerischer Typen mit InvariantCulture.
///
öffentliche Klasse NancyNumericConverter : ITypeConverter
{
public bool CanConvertTo(Type destinationType, BindingContext Kontext)
{
return 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);
}
}
```
Schreiben Sie einfach eigene
ITypeConverter
Danke für den Vorschlag, funktioniert super!
Aber es sieht so aus, als ob System.Convert.ChangeType
keine Nullable-Typen unterstützt.
Kann mit Nullable.GetUnderlyingType
wie folgt behoben werden:
/// <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);
}
}
Hilfreichster Kommentar
Schreiben Sie einfach eigene
ITypeConverter
``` c#
///
/// Nancy-Konverter zum Konvertieren numerischer Typen mit InvariantCulture.
///
öffentliche Klasse NancyNumericConverter : ITypeConverter
{
public bool CanConvertTo(Type destinationType, BindingContext Kontext)
{
return destinationType.IsNumeric();
}
```