gpt4 book ai didi

javascript - C# MVC JsonResult 动态数据表

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:40:44 27 4
gpt4 key购买 nike

我有一个 MVC 应用程序,我需要将表从 SQL 绘制到 Web。我无法事先创建表的模型,因此我在 CSHTML 文件中使用 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 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);

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

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

最佳答案

从我的 Angular 来看,这个问题有点复杂。

如果您使用 Microsoft.AspNetCore.Mvc JsonResult class 它将根据输入参数产生以下结果:

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' 是字典中的键。

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

关于javascript - C# MVC JsonResult 动态数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40970476/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com