Asp.net Mvc de Decimal Sayıyı Nokta veya Virgül ile Ayırabilme

Asp.net mvc de eğer bootstrap özelliğini kullanıyor iseniz muhtemelen decimal sayıda nokta ile ayırma hatası ile karşılaşacaksınız. Bu hatanın oluşmasına default olarak bootstrap kendi js dosyası ile engellemiştir. Ama yine siz decimal sayıyı nokta ile ayırmak zorunda kalabilirsiniz. Bu hatayı aşabilmek için aşağıdaki adımları takip ederek decimal sayıyı projenize nokta ve virgül ile ayırıcı işlem görebilmesini kolaylıkla sağlayabilirsiniz.

Decimal sayıyı(12.39) yazacağınız .cshtml dosyasının içerisinden öncelikle @Scripts.Render("~/bundles/jquery") jquery dosyasını kaldırmalısınız Eğer bu dosyayı o viewdan kaldırmaz iseniz formunuz post olmasını izin vermeyecektir. Bu Dosyayı kaldırdığınız anda form elemalarını hatlı bile doldursanız formunuz post olacaktır. Ancak birçoğu savechanges metodunda hata verecek veya NULLn olarak kayıt olacaktır.

Öncelikle model klasörünüzün içine bir tane .cs dosyası oluşturun ve içerisine aşağıdaki kodu olduğu gibi yapıştırın.

using System.Globalization;//kütüphanesi
public class DecimalModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
object result = null;
string modelName = bindingContext.ModelName;
string attemptedValue = bindingContext.ValueProvider.GetValue(modelName).AttemptedValue;
string wantedSeperator = NumberFormatInfo.CurrentInfo.NumberDecimalSeparator;
string alternateSeperator = (wantedSeperator == "," ? "." : ",");
if (attemptedValue.IndexOf(wantedSeperator) == -1 && attemptedValue.IndexOf(alternateSeperator) != -1)
{
attemptedValue = attemptedValue.Replace(alternateSeperator, wantedSeperator);
}
try
{
if (bindingContext.ModelMetadata.IsNullableValueType & string.IsNullOrWhiteSpace(attemptedValue))
return null;
result = decimal.Parse(attemptedValue, NumberStyles.Any);
}
catch (FormatException e)
{
bindingContext.ModelState.AddModelError(modelName, e);
}
return result;
}
}

Sonraki aşama ise projeniz başlarken bu dosyayı kendine yüklemesi için Global.asax.cs dosyasınıın içerisinde yer alan AplicationStart metodunun içerisine aşağıdaki kodu kendinize göre uyarlayıp yazmalısınız.

ModelBinders.Binders.Add(typeof(decimal?), new Eticaret2014.Models.Partial.DecimalModelBinder());
decimalKaynak : haacked.com/archive/2011/03/19/fixing-binding-to-decimals.aspx/

Yorum Yaz

Yorumlarınız denetimden geçtikten sonra yayınlanmaktadır...