double ,money,decimal gibi ondalıklı veri girme ajax validation

Herkes  Yazar Herkes Yazar

10 Şubat 2017 Yazılım Dilleri (152) /Asp.Net MVC (110) (524)

Paylaşmak güzeldir. Lütfen sizde paylaşın...


double ,money,decimal gibi ondalıklı veri girme ajax validation

Veti tabanında veri tipi  olarak money veya decimal tanımlama yapabilirsiniz.
Model:

[DisplayName("Güncel Kur Değeri")]

[Required(ErrorMessage = "Kur Değerini Giriniz!")]

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:c}")]

[DataType(DataType.Currency)]



        [Required(ErrorMessage = "Mecut Yakıt Giriniz!")]

        [DisplayName("Mecut Yakıt")]


        public double? MevcutYakit { get; set; }


Sayfanızda @Scripts.Render("~/bundles/jqueryval") var ise kaldırarak ajax validation kontrolünü iptal edebilirsiniz..

veya ;

@Scripts.Render("~/bundles/jqueryval") // Dan hemen sonrasına 
<script>//Ondalık validation sorununu çözmek için..

        jQuery.extend(jQuery.validator.methods, {

            number: function (value, element) {

                return this.optional(element)

                    || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:[,.]\d+)?$/.test(value);

            }

        });

    </script>

Sağlama almak için Aşağıdaki sınıftan oluşturun: (Decimal için ve double için virgül yerine . yapar.)

using System;
using System.Globalization;
using System.Web.Mvc;
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;
    }
}

public class DoubleModelBinder : 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 = Double.Parse(attemptedValue, NumberStyles.Any);
        }
        catch (FormatException e)
        {
            bindingContext.ModelState.AddModelError(modelName, e);
        }
        return result;
    }
}

 

Ve bunu Galobal.asax da belirtmeyi unutmayın;

 public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            ModelBinders.Binders.Add(typeof(double?), new DoubleModelBinder());
            ModelBinders.Binders.Add(typeof(decimal?), new DecimalModelBinder());
          
        }
    }

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

enter a multiple of 0.1. hatasının nedeni number step 0,1 olmasıdır. bunu 0.01 yaparak ve toFixed(2); //.toFixed(2) virgülden sonra 2 basamak alarak düzenleyebilirsiniz.

Eğer java scrip t ile işlem yapacaksanız aşağıda küçük bir örnek ;

  <div class="form-group col-md-3 ">
                                                    @Html.Label("Kalan Yakıt")
                                                    @Html.TextBoxFor(model => model.YagYakitSarfiyatBilgileriMarsKapatmaModel.KalanYakit, new
                                               {
                                                   @type = "number",
                                                   step = "0.01",
                                                   @min = "0",
                                                   @class = "form-control col-md-3 text-primary",
                                                   placeholder = "Kalan Yakıt "
                                               })
                                                    @Html.ValidationMessageFor(model => model.YagYakitSarfiyatBilgileriMarsKapatmaModel.KalanYakit, null, new { @class = "has-error text-danger" })
                                                </div>
 $('#YuklenenYakit').on('change', function (e) {
            var my = $('#MevcutYakit').val();
            var yy = $('#YuklenenYakit').val();
            //if (my == null || my.length < 1) {
            //    swal({
            //        type: 'error',
            //        title: 'Oops...',
            //        text: 'Mevcut Yakıtı Giriniz!',
            //        //footer: '<a href>Why do I have this issue?</a>'
            //    })
            //    $.unblockUI();
            //    return false;
            //}
            //var ty = parseFloat(my) + parseFloat(yy);
            ToplamYakit(Number(my).toFixed(2), Number(yy).toFixed(2));
            // $('#ToplamYakit').val(ty);
            //alert(ty);
        });

        $('#MevcutYakit').on('change', function (e) {
            var my = $('#MevcutYakit').val();
            var yy = $('#YuklenenYakit').val();
            //if (yy == null || yy.length < 1) {
            //    swal({
            //        type: 'error',
            //        title: 'Oops...',
            //        text: 'Yüklenen Yakıtı Giriniz!',
            //        //footer: '<a href>Why do I have this issue?</a>'
            //    })
            //    $.unblockUI();
            //    return false;
            //}
            //var ty = parseFloat(my) + parseFloat(yy);
            ToplamYakit(Number(my).toFixed(2), Number(yy).toFixed(2));
            // $('#ToplamYakit').val(ty);
            //alert(ty);
        });

        $('#ToplamYakit').on('click', function (e) {
            var my = $('#MevcutYakit').val();
            var yy = $('#YuklenenYakit').val();

            if (my == null || my.length < 1) {

                swal({
                    type: 'error',
                    title: 'Oops...',
                    text: 'Mevcut Yakıtı Giriniz!',
                    footer: 'Toplam Yakıt=Mevcut Yakıt+Yüklenen Yakıt',
                })
                $.unblockUI();
                return false;
            }

            if (yy == null || yy.length < 1) {
                swal({
                    type: 'error',
                    title: 'Oops...',
                    text: 'Yüklenen Yakıtı Giriniz!',
                    footer: 'Toplam Yakıt=Mevcut Yakıt+Yüklenen Yakıt',
                })
                $.unblockUI();
                return false;
            }

            //var ty = parseFloat(my) + parseFloat(yy);
            //ToplamYakit(parseFloat(my), parseFloat(yy));
            // $('#ToplamYakit').val(ty);
            //alert(ty);
        });

        function ToplamYakit(my, yy) {
            var ty = Number(Number(my) + Number(yy)).toFixed(2); //.toFixed(2) virgülden sonra 2 basamak al.
            $('#ToplamYakit').val(ty);
        }

 

}
 


Paylaşmak güzeldir. Lütfen sizde paylaşın...



Herkesyazar Ara