Nancy: Kemungkinan masalah Pengikatan Model dengan Desimal

Dibuat pada 1 Jul 2014  ·  3Komentar  ·  Sumber: NancyFx/Nancy

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.

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();
}

    public object Convert(string input, Type destinationType, BindingContext context)
    {
        if (string.IsNullOrEmpty(input))
        {
            return null;
        }

        return System.Convert.ChangeType(input, destinationType, CultureInfo.InvariantCulture);
    }
}

```

Semua 3 komentar

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);
    }
}
Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

jgillich picture jgillich  ·  7Komentar

RTodorov picture RTodorov  ·  6Komentar

jlennox picture jlennox  ·  5Komentar

Radzhab picture Radzhab  ·  11Komentar

thecodejunkie picture thecodejunkie  ·  4Komentar