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

  • Amazon Web Services

    Amazon Web S

    8 NİSAN 2009
  • CNET

    CNET

    5 Mayıs 2006
  • KRQE

    KRQE

    6 AĞUSTOS 2007