.net core mvc中input保留多位小数

本篇介绍:如何在mvc中使用html标签保留多位小数

你需要知道:

@html标签的使用: https://blog.csdn.net/pasic/article/details/7093802

js正则参考:https://blog.csdn.net/xinghuo0007/article/details/72675105

前端:Layui

①创建页面  Shared创建文件夹EditorTemplates(必须的,自定义都需要放到此目录下) ,然后添加Razor视图,命名为Number

 具体代码如下:

@using System.ComponentModel.DataAnnotations;
@using System.Reflection;
@{
    //Html.DisplayNameForModel(): [Display(Name = "xx")]
    //ViewData.TemplateInfo.HtmlFieldPrefix: @Html.EditorFor(model => model.DJ, new { Fixed = 2 })

    //保留的小数 传递的参数
    int Fixed = ViewData["Fixed"] == null ? 2 : (int)ViewData["Fixed"];
    //是否非空
    bool readOnly = false;
    readOnly = ViewData["readOnly"] == null ? false : (bool)ViewData["readOnly"];
    string dataRequired = "";
    string keyUp = "";
    try
    {
        var Field = ViewData.ModelMetadata.ContainerType.GetProperty(ViewData.TemplateInfo.HtmlFieldPrefix);
        RequiredAttribute required = (RequiredAttribute)Field.GetCustomAttribute(typeof(RequiredAttribute), false);
        if (required != null)
        {
            dataRequired = "data-val=true data-val-required=" + Html.DisplayNameForModel() + "为必填字段  data-val-number=" + Html.DisplayNameForModel() + "必须是数字";
        }
        if (Fixed == 0) //整数
        {
            keyUp = @"this.value=this.value.replace(/\D/gi,‘‘)";
        }
        else if (Fixed == -1) //不计算小数位
        {
            keyUp = @"this.value=this.value.replace(/[^\d.]/g,‘‘).replace(/^\./g,‘‘).replace(/\.{2,}/g,‘.‘).replace(‘.‘,‘$#$‘).replace(/\./g,‘‘).replace(‘$#$‘,‘.‘)";
        }
        else
        {
            keyUp = @"this.value=this.value.replace(/[^\d.]/g,‘‘).replace(/^\./g,‘‘).replace(/\.{2,}/g,‘.‘).replace(‘.‘,‘$#$‘).replace(/\./g,‘‘).replace(‘$#$‘,‘.‘).replace(/^(\-)*(\d+)\.(\d{" + Fixed + "}).*$/,‘$1$2.$3‘)";
        }
    }
    catch { }
}
<input class="layui-input input-validation-error" type="text" @dataRequired @(readOnly ? "disabled" : "")
       id="@ViewData.TemplateInfo.HtmlFieldPrefix" name="@ViewData.TemplateInfo.HtmlFieldPrefix"
       aria-describedby="@ViewData.TemplateInfo.HtmlFieldPrefix-error"
       aria-invalid="true" [email protected]>

②在ViewModel上面标注: UIHint("Number")

③页面使用:

注:如果我们不想使用@html标签,我们也能使用js的

添加js方法:

 layInputNumber: function (idForm) {
        var advDiv = $(idForm);
        var allInput = $("[data-options]", advDiv);
        for (var i = 0; i < allInput.length; i++) {
            let item = $(allInput[i]);
            if (item[0] != "") {
                let op = item.data(‘options‘);
                if (op.type == "Fixed") {
                    let Fixed = 2;//默认两位
                    if (op.Fixed) {
                        Fixed = op.Fixed;
                    }
                    let obj = item[0];
                    if (Fixed == 0) //整数
                    {
                        item[0].onkeyup = function (e) {
                            obj.value = obj.value.replace(/\D/gi, ‘‘);
                        };
                    }
                    else if (Fixed == -1) //不计算小数位
                    {
                        item[0].onkeyup = function (e) {
                            obj.value = obj.value.replace(/[^\d.]/g, ""); //清除"数字"和"."以外的字符
                            obj.value = obj.value.replace(/^\./g, ""); //验证第一个字符是数字
                            obj.value = obj.value.replace(/\.{2,}/g, "."); //只保留第一个, 清除多余的
                            obj.value = obj.value.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
                        };
                    }
                    else {
                        item[0].onkeyup = function (e) {
                            obj.value = obj.value.replace(/[^\d.]/g, ""); //清除"数字"和"."以外的字符
                            obj.value = obj.value.replace(/^\./g, ""); //验证第一个字符是数字
                            obj.value = obj.value.replace(/\.{2,}/g, "."); //只保留第一个, 清除多余的
                            obj.value = obj.value.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
                            //参数不能使用字面量来添加,需要使用 new RegExp
                            var re = new RegExp("^(\\-)*(\\d+)\\.(\\d{" + Fixed + "}).*$");
                            obj.value = obj.value.replace(re, "$1$2.$3")
                            //obj.value = obj.value.replace(/^(\-)*(\d+)\.(\d{n}).*$/, "$1$2.$3");     //能输入两个小数
                        }
                    }
                }
            }
        }

 <div class="layui-input-block">
  @*利用data-options传递自定义参数,这个是跟js对应的*@
  <input name="HL" id="HL" class="layui-input" lay-verify="required|number" data-options=‘{"type":"Fixed","Fixed":3}‘ />
</div>

使用:

原文地址:https://www.cnblogs.com/Sea1ee/p/11382111.html

时间: 2024-08-03 02:56:45

.net core mvc中input保留多位小数的相关文章

JS中格式化数据保留两位小数

问题:在JS中格式化数据保留两位小数的函数的多种方法 最好方法: 保留两位好像是这样吧     var   a   =   9.39393;     alert(a.toFixed(2)); 说明: alert(Number.toFixed(9.39393));     返回的是9.39     但是只有ie5.5以上的版本才支持. 其它方法: 方法一: function   roundFun(numberRound,roundDigit)   //四舍五入,保留位数为roundDigit   

梁勇(Danniel Liang) java教材例题:java程序购买额按税率求营业税 java中数值保留2位小数的方法

package com.swift; import java.util.Scanner; public class PurchaseTaxDecimalsTwo { public static void main(String[] args) { Scanner scan=new Scanner(System.in);//扫描工作台输入 double purchaseAmount=scan.nextDouble();//输入数值赋值 购买额变量 System.out.println(purcha

c#中的保留两位小数并且四舍五入

Math.Round(45.367,2)     //Returns   45.37 Math.Round(45.365,2)     //Returns   45.36 C#中的Round()不是我们中国人理解的四舍五入,是老外的四舍五入,是符合IEEE标准的四舍五入,具体是四舍六入,下面的才是符合中国人理解的四舍五入 Math.Round(45.367,2,MidpointRounding.AwayFromZero);//45.37 Math.Round(45.365,2,MidpointR

javascript实现保留两位小数的多种方法

这篇文章主要介绍了javascript实现保留两位小数的多种方法,如果数字的原本小数位数不到两位,那么缺少的就自动补零,感兴趣的小伙伴们可以参考一下 第一种方法:javascript实现保留两位小数一位自动补零代码实例:第一种方法介绍一下如何实现对数字保留两位小数效果,如果数字的原本小数位数不到两位,那么缺少的就自动补零,这个也是为了统一的效果,先看代码实例: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 function returnFloat(value)

JS小数位保留两位小数--toFixed()

parseInt,parseFloat,parseDouble在JS中是将值转换成相应的类型: 你必须要这样,才能实现: <script>         alert(parseFloat(12.44644).toFixed(2)); </script> 想要精确到几位,就tofixed几 在JS中格式化数据保留两位小数的函数的多种方法最好方法:  var   a   =   9.39393;     alert(a.toFixed(2));

html模板中的数字保留两位小数

<script> //html模板中的数字保留两位小数 function formatCurrency(num) { num = num.toString().replace(/\$|\,/g,''); if(isNaN(num)) num = "0"; sign = (num == (num = Math.abs(num))); num = Math.floor(num*100+0.50000000001); cents = num%100; num = Math.flo

asp.net core mvc中如何把二级域名绑定到特定的控制器上

由于公司的工作安排,一直在研究其他技术,所以一直没时间更新博客,今天终于可以停下手头的事情,写一些新内容了. 应用场景:企业门户网站会根据内容不同,设置不同的板块,如新浪有体育,娱乐频道,等等.有的情况下需要给不同的板块设置不同的二级域名,如新浪体育sports.sina.com.cn. 在asp.net core mvc中,如果要实现板块的效果,可能会给不同的板块建立不同的控制器(当然也有其他的技术,这里不讨论实现方式的好坏),在这种情况下,如何给控制器绑定上独有的二级域名,比如体育频道对应的

007.Adding a view to an ASP.NET Core MVC app -- 【在asp.net core mvc中添加视图】

Adding a view to an ASP.NET Core MVC app 在asp.net core mvc中添加视图 2017-3-4 7 分钟阅读时长 本文内容 1.Changing views and layout pages 修改视图和布局页 2.Change the title and menu link in the layout file 在布局文件中修改标题与菜单 3.Passing Data from the Controller to the View 从控制器向视图

菜鸟入门【ASP.NET Core】5:命令行配置、Json文件配置、Bind读取配置到C#实例、在Core Mvc中使用Options

命令行配置 我们通过vs2017创建一个控制台项目CommandLineSample 可以看到现在项目以来的是dotnet core framework 我们需要吧asp.net core引用进来,我们可以直接添加Microsoft.AspNetCore.All 安装完成之后,我们可以通过using Microsoft.Extensions.Configuration;来进行后续的配置 static void Main(string[] args) { var builder = new Con