在 ASP .NET Core 中从数据库获取图表数据时遇到问题
Having trouble fetching data from database for chart in ASP .NET Core
我在将数据从我的 Azure SQL 数据库加载到我使用 chartJS 创建的图表时遇到了问题。我正在尝试从“workTS”table 中从“hrPlan”、“hrSub”和“hrFact”列中获取 2021 年的数据,但它目前工作不正常。
如果我尝试直接从图表函数中获取日志中的 hrPlan、hrSub 或 hrFact 值,如下所示:console.log("hrPlan=" + hrPlan);
我收到以下错误:Uncaught ReferenceError: hrPlan is not defined
我想我没有正确地为我的图表函数提供数据值,但我可能是错的。
它应该是这样的(所有数据都是硬编码的):
现在是这样的:
dbo.workTS:
我的 workTS 模型代码:
public class WorkTS
{
public string? org { get; set; }
public DateTime? dt { get; set; }
public decimal? hrFact { get; set; }
public decimal? hrPlan { get; set; }
public decimal? hrReestr { get; set; }
public DateTime? dtSynchro { get; set; }
public DateTime? dtMonth { get; set; }
public decimal? hrSub { get; set; }
public decimal? hrFactWSub { get; set; }
}
上下文:
public class AzureDBContext : DbContext
{
public DbSet<WorkTS> WorkTs { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<WorkTS>(builder =>
{
builder.HasNoKey();
builder.ToTable("workTS");
});
}
public AzureDBContext(DbContextOptions<AzureDBContext> options)
: base(options)
{
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("{database connection string}");
}
}
控制器:
private readonly AzureDBContext _azdb;
public HomeController(ILogger<HomeController> logger, AzureDBContext azcontext)
{
_logger = logger;
_azdb = azcontext;
}
public async Task<ActionResult> OnGetWorkTSData_MTK()
{
var plan = _azdb.WorkTs.Where(w => w.org == "ООО \"МТК\"").Where(w => w.dtMonth.Value.Year == 2021).Select(w => w.hrPlan).ToArray();
var sub = _azdb.WorkTs.Where(w => w.org == "ООО \"МТК\"").Where(w => w.dtMonth.Value.Year == 2021).Select(w => w.hrSub).ToArray();
var fact = _azdb.WorkTs.Where(w => w.org == "ООО \"МТК\"").Where(w => w.dtMonth.Value.Year == 2021).Select(w => w.hrFact).ToArray();
return new JsonResult(new { hrPlan = plan, hrSub = sub, hrFact = fact });
}
最后,图表代码:
<div>
<canvas id="workTSChart"></canvas>
</div>
<script>console.log("This is first debug line");</script>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
$(document).ready(function () {
$.ajax({
type: "Get",
url: '@Url.Action("OnGetWorkTSData_MTK","home")',
contentType: "application/json",
dataType: "json",
success: function (response) {
var data = response.hrPlan;
var data2 = response.hrSub;
var data3 = response.hrFact;
var ctx = document.getElementById("workTSChart");
var workTSChart = new Chart(ctx, {
type: 'bar',
data: {
labels: [
'ООО "МТК"',
],
datasets: [{
label: 'Plan hours',
data: data,
backgroundColor: 'rgb(161, 221, 239)',
borderColor: 'rgb(161, 221, 239)',
},
{
label: 'Sub hours',
data: data2,
backgroundColor: 'rgb(254, 171, 133)',
borderColor: 'rgb(254, 171, 133)',
},
{
label: 'Fact hours',
data: data3,
backgroundColor: 'rgb(127, 137, 138)',
borderColor: 'rgb(127, 137, 138)',
}]
},
options: {
responsive: true,
plugins: {
legend: {
position: 'top',
},
title: {
display: true,
text: 'Test chart'
}
}
},
});
},
error: function (response) {
alert(response.responseText);
console.log("This is ERROR line");
}
});
});
如果后端像下面这样,你得到的数据只是一个简单的小数。
var plan = _azdb.WorkTs.Where(w => w.org == "ООО \"МТК\"")
.Where(w => w.dtMonth.Value.Year == 2021)
.Select(w => w.hrPlan)
.Sum();
data
in datasets
应该是一个数组。您需要如下更改:
datasets: [{
label: 'Plan hours',
data: [data], //change here...
backgroundColor: 'rgb(161, 221, 239)',
borderColor: 'rgb(161, 221, 239)',
},
{
label: 'Sub hours',
data: [data2], //change here...
backgroundColor: 'rgb(254, 171, 133)',
borderColor: 'rgb(254, 171, 133)',
},
{
label: 'Fact hours',
data: [data3], //change here...
backgroundColor: 'rgb(127, 137, 138)',
borderColor: 'rgb(127, 137, 138)',
}]
我在将数据从我的 Azure SQL 数据库加载到我使用 chartJS 创建的图表时遇到了问题。我正在尝试从“workTS”table 中从“hrPlan”、“hrSub”和“hrFact”列中获取 2021 年的数据,但它目前工作不正常。
如果我尝试直接从图表函数中获取日志中的 hrPlan、hrSub 或 hrFact 值,如下所示:console.log("hrPlan=" + hrPlan);
我收到以下错误:Uncaught ReferenceError: hrPlan is not defined
我想我没有正确地为我的图表函数提供数据值,但我可能是错的。
它应该是这样的(所有数据都是硬编码的):
public class WorkTS
{
public string? org { get; set; }
public DateTime? dt { get; set; }
public decimal? hrFact { get; set; }
public decimal? hrPlan { get; set; }
public decimal? hrReestr { get; set; }
public DateTime? dtSynchro { get; set; }
public DateTime? dtMonth { get; set; }
public decimal? hrSub { get; set; }
public decimal? hrFactWSub { get; set; }
}
上下文:
public class AzureDBContext : DbContext
{
public DbSet<WorkTS> WorkTs { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<WorkTS>(builder =>
{
builder.HasNoKey();
builder.ToTable("workTS");
});
}
public AzureDBContext(DbContextOptions<AzureDBContext> options)
: base(options)
{
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("{database connection string}");
}
}
控制器:
private readonly AzureDBContext _azdb;
public HomeController(ILogger<HomeController> logger, AzureDBContext azcontext)
{
_logger = logger;
_azdb = azcontext;
}
public async Task<ActionResult> OnGetWorkTSData_MTK()
{
var plan = _azdb.WorkTs.Where(w => w.org == "ООО \"МТК\"").Where(w => w.dtMonth.Value.Year == 2021).Select(w => w.hrPlan).ToArray();
var sub = _azdb.WorkTs.Where(w => w.org == "ООО \"МТК\"").Where(w => w.dtMonth.Value.Year == 2021).Select(w => w.hrSub).ToArray();
var fact = _azdb.WorkTs.Where(w => w.org == "ООО \"МТК\"").Where(w => w.dtMonth.Value.Year == 2021).Select(w => w.hrFact).ToArray();
return new JsonResult(new { hrPlan = plan, hrSub = sub, hrFact = fact });
}
最后,图表代码:
<div>
<canvas id="workTSChart"></canvas>
</div>
<script>console.log("This is first debug line");</script>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
$(document).ready(function () {
$.ajax({
type: "Get",
url: '@Url.Action("OnGetWorkTSData_MTK","home")',
contentType: "application/json",
dataType: "json",
success: function (response) {
var data = response.hrPlan;
var data2 = response.hrSub;
var data3 = response.hrFact;
var ctx = document.getElementById("workTSChart");
var workTSChart = new Chart(ctx, {
type: 'bar',
data: {
labels: [
'ООО "МТК"',
],
datasets: [{
label: 'Plan hours',
data: data,
backgroundColor: 'rgb(161, 221, 239)',
borderColor: 'rgb(161, 221, 239)',
},
{
label: 'Sub hours',
data: data2,
backgroundColor: 'rgb(254, 171, 133)',
borderColor: 'rgb(254, 171, 133)',
},
{
label: 'Fact hours',
data: data3,
backgroundColor: 'rgb(127, 137, 138)',
borderColor: 'rgb(127, 137, 138)',
}]
},
options: {
responsive: true,
plugins: {
legend: {
position: 'top',
},
title: {
display: true,
text: 'Test chart'
}
}
},
});
},
error: function (response) {
alert(response.responseText);
console.log("This is ERROR line");
}
});
});
如果后端像下面这样,你得到的数据只是一个简单的小数。
var plan = _azdb.WorkTs.Where(w => w.org == "ООО \"МТК\"")
.Where(w => w.dtMonth.Value.Year == 2021)
.Select(w => w.hrPlan)
.Sum();
data
in datasets
应该是一个数组。您需要如下更改:
datasets: [{
label: 'Plan hours',
data: [data], //change here...
backgroundColor: 'rgb(161, 221, 239)',
borderColor: 'rgb(161, 221, 239)',
},
{
label: 'Sub hours',
data: [data2], //change here...
backgroundColor: 'rgb(254, 171, 133)',
borderColor: 'rgb(254, 171, 133)',
},
{
label: 'Fact hours',
data: [data3], //change here...
backgroundColor: 'rgb(127, 137, 138)',
borderColor: 'rgb(127, 137, 138)',
}]