javascript – C#MVC JsonResult动态数据表

我有一个MVC应用程序,我需要从sql绘制表到Web.我无法预先创建表的模型,因此我在CS HTML文件中使用 JavaScript代码动态创建DataTable:

var data,tableName = "#demotable",columns,str,jqxhr = $
    .ajax({
      data: { str: JSON.stringify("kurator") },url: MyAppUrlSettings.MyUsefulUrl,type: "GET",datatype: "json"
    })
    .done(function() {
      data = JSON.parse(jqxhr.responseText);
      debugger;
      // Iterate each column and print table headers for Datatables
      $.each(data.columns,function(k,colObj) {
        str = "<th>" + colObj.data + "</th>";
        $(str).appendTo(tableName + ">thead>tr");
        debugger;
      });
      // Add some Render transformations to Columns
      // Not a good practice to add any of this in API/ Json side
      data.columns[0].render = function(data,type,row) {
        return "<h4>" + data + "</h4>";
        debugger;
      };
      // Debug? console.log(data.columns[0]);
      $(tableName).dataTable({
        data: data.data,columns: data.columns,fnInitComplete: function() {
          // Event handler to be fired when rendering is complete (Turn off Loading gif for example)
          console.log("Datatable rendering complete");
        }
      });
      debugger;
    });

我需要从ControllerAction返回一个JSON对象数组.这就是我创建DataTable的方法

DataTable dt = new DataTable();

List<string> _columns = new List<string>() { "kurator","Filial","Klient","Saldo","Docs","no_Docs","Change","Status" };

for (int i = 0; i < _columns.Count; i++)
{
  cols.Add(new Columns { ColumnID = "data",ColumnName = _columns[i] });
  dt.Columns.Add(_columns[i],typeof(string));
}

// Add rows to Table

DaTarow _ravi;

_ravi = dt.NewRow();                    

dt.Rows.Add(_ravi);

然后,最后,我需要将列和数据的数组放入JsonResult:

var data2 = debitor.Select(p => new {
  kurator = p.kurator,Filial = p.Filial,Klient = p.Klient,Saldo = p.Saldo,Docs = p.Docs,no_Docs = p.no_Docs,Change = p.Change,Status = p.Status
});

// var data1 = JsonConvert.DeserializeObject(data);

// var data = new JavaScriptSerializer().Serialize(dt,Formatting.Indented);

// JObject RSS =  new JObject(new JProperty("title","James Newton-King"));

var columns = cols.Select(p => new {
  data = p.ColumnName
});

return Json(new { data = data2,columns = columns },JsonRequestBehavior.AllowGet);

这工作正常=>它返回一个对象数组(当来自Model var data2时),但是当我尝试从我的DataTable(注释)中获取行数组时,Json中没有结果.

如何正确地将JsonResult放入我的DataTable行?我不能使用模型,因为我不知道SQL查询的结果中有多少列.

解决方法

从我的观点来看,问题有点复杂.

如果您使用的是Microsoft.AspNetCore.Mvc JsonResult类,它将根据输入参数生成以下结果:

与List<>一起使用时:

using Microsoft.AspNetCore.Mvc;

 class SomeClass 
 {
     public string value1 {get; set;}
     public int value2 {get; set;}
 }

 // Controller code
 List<SomeClass> result = // Init list using Linq Select or similar
 return new JsonResult(result);

这段代码像这样生成JSON(对象数组)

{
     [
          { value1: "some string",value2: 1
          },{
            value1: "another string",value2: 20
          }
     ]
}

与Dictionary<>一起使用时

class AnotherClass 
{
    public string value1 {get; set;}
    public int value2 {get; set;}
}

// Controller code
// Dictionary should has key which became key in resulting object
Dictionary<string,AnotherClass> result = // Init dictionary 
return new JsonResult(result);

这段代码像这样(一个大对象)生成JSON. ‘key1’和’key2’是来自Dictionary的键.

{
     key1: { 
               value1: "some string",value2: 1
           },key2: {
               value1: "another string",value2: 20
          }
}

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...