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)
Sepertinya ini bug, mencobanya sendiri dengan rute dan desimal dan mendapat pengecualian yang sama.
DecimalConverter.ConvertFrom digunakan dalam konteks budaya saat ini, mengharapkan "1,1" bukan "1.1" dalam budaya Turki. Strategi fallback dapat diimplementasikan dengan menggunakan ConvertFrom dengan InvariantCulture. Apakah Anda menerima permintaan tarik?
Tulis saja ITypeConverter
``` c#
///
/// Konverter Nancy untuk mengonversi tipe numerik dengan InvariantCulture.
///
NancyNumericConverter kelas publik : ITypeConverter
{
bool publik CanConvertTo (Tipe tipe tujuan, konteks BindingContext)
{
kembali 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);
}
}
```
Tulis saja
ITypeConverter
Terima kasih atas sarannya, itu bekerja dengan baik!
Tapi sepertinya System.Convert.ChangeType
tidak mendukung tipe nullable.
Dapat diperbaiki menggunakan Nullable.GetUnderlyingType
seperti ini:
/// <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);
}
}
Komentar yang paling membantu
Tulis saja
ITypeConverter
``` c#
///
/// Konverter Nancy untuk mengonversi tipe numerik dengan InvariantCulture.
///
NancyNumericConverter kelas publik : ITypeConverter
{
bool publik CanConvertTo (Tipe tipe tujuan, konteks BindingContext)
{
kembali destinationType.IsNumeric();
}
```