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

  • boogie2988

    boogie2988

    6 NİSAN 2006
  • Orson Wang

    Orson Wang

    28 EKİM 2006
  • Simon Hayter

    Simon Hayter

    20 HAZİRAN 2010