asp.net MVC kaynak koduna adım sonra, sorun dönüşüm asp.net mvc için çerçevenin tip dönüştürücü kullanır olmasıdır seemsd nedense hangi onlu dönüşümü int için false döndürür, ben ondalık için özel modeli cilt sağlayıcı ve model bağlayıcı kullanılarak sona erdi, buradan görebilirsiniz:
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 Convert.ToDecimal(valueProviderResult.AttemptedValue);
}
#endregion
}
bu ModelBinder kaydetmek için, sadece Application_Start()
içine aşağıdaki satırı koyun:
ModelBinders.Binders.Add(typeof(decimal), new DecimalModelBinder());
ModelBinders.Binders.Add(typeof(decimal?), new DecimalModelBinder());
'return' ifadesinde Boole ifadesi "valueProviderResult == null" ifadesi, "valueProviderResult.AttemptedValue" ifadesinden önce, null-ref istisnası atar. – Diego
not: Phil Haack bunu da tavsiye ediyor, http://haacked.com/archive/2011/03/19/fixing-binding-to-decimals.aspx –
Tam olarak bu sorun için orijinal çözümünü kullanıyorum - teşekkürler! Bir sorun: ondalık için nulls? yerine sıfır alanları atanır. Sonunda, türün varsayılan değerini ataıp atamayacağımı belirlemek için 'valueProviderResult.RawValue == null' kontrolünü yaptım. – Matt