Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 格式化十进制JsonResult ASP MVC 5_C#_Json_Asp.net Mvc_Asp.net Mvc 5_Datatables - Fatal编程技术网

C# 格式化十进制JsonResult ASP MVC 5

C# 格式化十进制JsonResult ASP MVC 5,c#,json,asp.net-mvc,asp.net-mvc-5,datatables,C#,Json,Asp.net Mvc,Asp.net Mvc 5,Datatables,我正在使用ASP MVC 5和插件,在设置小数时遇到了一些问题 我需要用点作为千位分隔符,逗号作为十进制分隔符来格式化数字 我试图用DisplayFormat来实现这一点,但由于我以Json的形式返回数据,所以它不适用 这是我问题的一个小例子 public class MyClass { [DisplayFormat(DataFormatString = "{0:0.##}")] decimal MyDecimal {get;set;} } 在控制器中 public JsonRes

我正在使用ASP MVC 5和插件,在设置小数时遇到了一些问题

我需要用点作为千位分隔符,逗号作为十进制分隔符来格式化数字

我试图用
DisplayFormat
来实现这一点,但由于我以Json的形式返回数据,所以它不适用

这是我问题的一个小例子

public class MyClass
{
   [DisplayFormat(DataFormatString = "{0:0.##}")]
   decimal MyDecimal {get;set;}
}
在控制器中

public JsonResult LoadDataTables()
{    
    using(var db = new ExampleContext())
    {
        var data = db.MyRepository.Select(x => new MyClass
        {
            MyDecimal = x.mydecimal
        }).ToList();
        //i'm ignoring a lot of processing to create a short snippet
        return Json(new { draw = draw, recordsFiltered = recordsTotal, recordsTotal = recordsTotal, data = data });
    }
}
然后,在前端,json以逗号表示千,点表示十进制分隔

我该怎么处理呢?应用
CultureInfo
或手动设置转换的方法

编辑:在我看来,这就是我加载数据的方式

var table = $('#myTabla').DataTable({
                    processing: true,
                    serverSide: true,
                    filter: true,
                    orderMulti: false,
                    paging: true,
                    pageLength: 10,
                    ajax: {
                        "url": '@Url.Action("LoadDataTables")',
                        "type": "POST",
                        "datatype": "json",
                    });

谢谢

您需要设置自定义区域性:

System.Globalization.CultureInfo customCulture = (System.Globalization.CultureInfo)
System.Threading.Thread.CurrentThread.CurrentCulture.Clone();
customCulture.NumberFormat.NumberDecimalSeparator = ",";

System.Threading.Thread.CurrentThread.CurrentCulture = customCulture;

谢谢你。

1-你可以用另一种方式来做:

public class MyClass
{
   MyNumber MyDecimal {get;set;}
}

struct MyNumber
{
    decimal Value {get;set;}

    ToString()
    {
        // Adapt number Format and CultureInfo as wanted
        return value.ToString("0:0.##", MyCultureInfo);
    }
}
用途:

十进制d=MyNumber.Value

字符串s=(字符串)MyNumber;或MyNumber.ToString()

2-或在客户端:

// Invert . and ,
// 1.22222.5689,56
// to 1,22222,5689.56
String.prototype.formatNumber = function(number)
{
    return number.replace(',', ';').replace('.', ',').replace(';', '.');
}
3-我在C#中操作JSon的最佳选择是:


您可以序列化和反序列化json,并创建自定义转换。

您可以使用Number helper进行此操作。您可以访问此链接以了解更多信息:

这是一个样本。希望能帮上忙,我的朋友:))

//控制器中的代码

public class Test
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public decimal Currency  { get; set; }
    }

private List<Test> Data()
        {
            var data = new List<Test>
            {
                new Test{ Id = 1, Name = "A1", Currency = 1000000.00M},
                new Test{ Id = 2, Name = "A2", Currency= 50000000.12M},
                new Test{ Id = 3, Name = "A3", Currency = 3000000.45M},
                new Test{ Id = 4, Name = "A4", Currency = 20000}
            };
            return data;
        }

        [HttpPost]
        public JsonResult LoadDataTables()
        {
            var data = Data();
            var recordsTotal = Data().Count;
            var recordsFiltered = Data().Count();
            string draw = Request.Form.GetValues("draw")[0];
            return Json(new { draw = Convert.ToInt32(draw), recordsTotal = recordsTotal, recordsFiltered = recordsFiltered, data = data }, JsonRequestBehavior.AllowGet);
        }
公共类测试
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共十进制货币{get;set;}
}
私有列表数据()
{
var数据=新列表
{
新测试{Id=1,Name=“A1”,货币=1000000.00M},
新测试{Id=2,Name=“A2”,货币=50000000.12M},
新测试{Id=3,Name=“A3”,货币=3000000.45M},
新测试{Id=4,Name=“A4”,货币=20000}
};
返回数据;
}
[HttpPost]
公共JsonResult LoadDataTables()
{
var data=data();
var recordsTotal=Data().Count;
var recordsFiltered=Data().Count();
string draw=Request.Form.GetValues(“draw”)[0];
返回Json(新的{draw=Convert.ToInt32(draw),recordsTotal=recordsTotal,recordsFiltered=recordsFiltered,data=data},JsonRequestBehavior.AllowGet);
}
//看法

<table id="myTable" >
    <thead>
        <tr>
            <td >Id</td>
            <td >Name</td>
            <td>Currency</td>
        </tr>
    </thead>
    <tbody>
    </tbody>
</table>

    var table = $('#myTable').DataTable({
                    processing: true,
                    serverSide: true,
                    filter: true,
                    orderMulti: false,
                    paging: true,
                    pageLength: 10,
                    ajax: {
                            "url": '@Url.Action("LoadDataTables", "Home")',
                            "type": "POST",
                            "datatype": "json",
                    },
                    "columns": [
                        {
                            "data": "Id"
                        }, {
                            "data": "Name"
                        }, {
                            "data": "Currency",
                            render: $.fn.dataTable.render.number('.', ',', 2, '')
                        }
                    ]
                });

身份证件
名称
通货
变量表=$('#myTable')。数据表({
处理:对,
服务器端:是的,
过滤器:对,
orderMulti:false,
是的,
页长:10,
阿贾克斯:{
“url”:“@url.Action(“LoadDataTables”、“Home”),
“类型”:“职位”,
“数据类型”:“json”,
},
“栏目”:[
{
“数据”:“Id”
}, {
“数据”:“名称”
}, {
“数据”:“货币”,
render:$.fn.dataTable.render.number(“.”、“.”、“、2.”)
}
]
});

我的朋友,您能在视图中显示您的代码吗?以下是ToString()输出格式的文档:。您可以将CultureInfo应用于输出。@Tomato32添加了如何加载数据,我的视图只有一个表和该脚本basically@Shim-Sao问题是我必须在哪里应用它?
DisplayFormat
注释从不显示happen@JuanSalvadorPortugal你的JSON很好。使用点是JSON中数字的实际标准。您的DataTable配置应该指定十进制字段的显示方式Hi,谢谢您的回答!我尝试了一下,但结果是一样的:(你删除了属性[DisplayFormat(DataFormatString=“{0:0.##}”)]?是的,我已经配置了区域性,我的问题是,出于某种原因,它没有应用到Json转换阅读本文