在 MVC 中显示之前格式化 JSON 字符串? (带数据表)

Format JSON string before displaying it in MVC? (with datatables)

这里有一个不错的 JSON 问题;

在将日期、时间跨度、小数等发送到 MVC 中的视图之前,我不知道如何设置格式。我正在使用数据tables jQuery 插件和我的'DataHandler' 方法returns 一个JSON 对象作为数据table 的来源。

当我在客户端处理数据和过滤时非常简单,但现在我在服务器端处理数据。

控制器:

 public JsonResult DataHandler(DTParameters param)
        {
            try
            {
                var dtsource = new List<spRegistrations_Result>();
                using (entities dc = new entities())
                {
                    dtsource = dc.spRegistrations().ToList();
                }

                List<String> columnSearch = new List<string>();

                foreach (var col in param.Columns)
                {
                    columnSearch.Add(col.Search.Value);
                }

                List<spRegistrations_Result> data = new ResultSet().GetResult(param.Search.Value, param.SortOrder, param.Start, param.Length, dtsource, columnSearch);
                int count = new ResultSet().Count(param.Search.Value, dtsource, columnSearch);
                DTResult<spRegistrations_Result> result = new DTResult<spRegistrations_Result>
                {
                    draw = param.Draw,
                    data = data,
                    recordsFiltered = count,
                    recordsTotal = count
                };
                return Json(result);
            }
            catch (Exception ex)
            {
                return Json(new { error = ex.Message });
            }
        }

Table初始化:

var table = $('#myTable').DataTable({
            responsive: true,
            "serverSide": true,
            "ajax": {
                "type": "POST",
                "url": '/Table/DataHandler',
                "contentType": 'application/json; charset=utf-8',
                'data': function (data) { return data = JSON.stringify(data); }
            },
            "drawCallback": function(settings){
                $('.card').hide();
            },
            "paging": true,
            "deferRender": true,
            "columns": [
           { "data": "RegId" },
           { "data": "PresenceDate" }, etc...

型号:

 public int RegId { get; set; }
 public System.TimeSpan StartTime { get; set; }
 public System.TimeSpan EndTime { get; set; }
 public System.DateTime PresenceDate { get; set; }

This is how it looks when the table is displayed

如您所见,日期格式不是很好,这就是我想在显示数据之前对其进行格式化的原因。我最终想在 table.

中显示的几个 TimeSpan 对象等也是如此

我对 ajax 还是很陌生,不知道如何以最简单的方式进行。感谢您的任何输入!

您可以使用 columns.render 属性 定义 table 单元格的内容,使用自定义 js 函数来格式化日期。类似于:

...
"render": function ( data, type, full, meta ) {
      var date = new Date(parseInt(data.substr(6), 0));
      return ISODateString(date);
}

格式化日期的函数dd/mmm/yyyy:

function ISODateString(d) {
    function pad(n) { return n < 10 ? '0' + n : n }
    return pad(d.getDate()) + '/' + pad(d.getMonth() + 1) + '/' + d.getFullYear();
}