SORU
18 NİSAN 2011, PAZARTESİ


Varsayılan't bağlama ondalık özellikleri yok ASP.NET MVC 3 model binder

Bir eylem bu JSON gönderdiğim nedense:

{"BaseLoanAmount": 5000}

hangi ondalık bir özellik "" bağlama değil, sadece 0 kalır. BaseLoanAmount adında bir modele bağlı olması mı gerekiyor Ama eğer gönderirsem:

{"BaseLoanAmount": 5000.00}

bağlama özelliği, ama neden? Değil 5000, ondalık sayılar var değil mi ondalık bir olay dönüştürülebilir?

CEVAP
22 NİSAN 2011, Cuma


Sonra adım içine asp.net mvc kaynak kodu, seemsd sorun olduğu için dönüşüm asp.net mvc kullanır çerçevesinde bu tür dönüştürücü, nedense false için bir int ondalık dönüşüm, sona erdi kullanarak bir özel model binder sağlayıcı ve model Ciltçi için ondalıklar, görüyorsun işte

public class DecimalModelBinder : DefaultModelBinder
{
    #region Implementation of IModelBinder

    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);

        if (valueProviderResult.AttemptedValue.Equals("N.aN") ||
            valueProviderResult.AttemptedValue.Equals("NaN") ||
            valueProviderResult.AttemptedValue.Equals("Infini.ty") ||
            valueProviderResult.AttemptedValue.Equals("Infinity") ||
            string.IsNullOrEmpty(valueProviderResult.AttemptedValue))
            return 0m;

        return valueProviderResult == null ? base.BindModel(controllerContext, bindingContext) : Convert.ToDecimal(valueProviderResult.AttemptedValue);
    }    

    #endregion
}

Bu ModelBinder kaydetmek için, sadece Application_Start() içinde aşağıdaki satırı koyun:

ModelBinders.Binders.Add(typeof(decimal), new DecimalModelBinder());
ModelBinders.Binders.Add(typeof(decimal?), new DecimalModelBinder());

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ADDVOiCE

    ADDVOiCE

    28 Mayıs 2009
  • Derek Banas

    Derek Banas

    12 AĞUSTOS 2008
  • RD

    RD

    19 NİSAN 2006