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

时间:2015-10-20 20:16:19

标签: json ajax model-view-controller format datatables

在这里有一个很好的JSON问题;

在将其发送到MVC中的视图之前,我不知道如何格式化日期,时间跨度,小数等。我正在使用datatables jQuery插件,我的'DataHandler'方法返回一个JSON对象作为数据表的源。

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

控制器:

properties: {
    links: {
        type: Array,
        notify: true,
        value: function(){ return []; }
    }
}

表格初始化:

 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 });
            }
        }

型号:

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...

This is how it looks when the table is displayed

正如您所看到的,日期格式不是很好,这也是我想在显示之前格式化数据的原因。对于我最终希望在表中显示的几个TimeSpan对象也是如此。

我仍然是ajax的新手,并且不知道如何以最简单的方式解决这个问题。感谢您的任何意见!

1 个答案:

答案 0 :(得分:0)

您可以使用columns.render属性来定义表格单元格的内容,使用自定义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();
}