在 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();
}
这里有一个不错的 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();
}