在我的项目ı中,我尝试使用javascript图表和数据库中的数据,
首先,我已经用viewbag发送了我的数据
public IActionResult Index()
{
var student = _context.Student.Select(x => x.Name).ToList();
ViewBag.student = student;
var notes = _context.Student.Select(y => y.Note).ToList();
ViewBag.notes = notes;
return View();
}所以在javascript中,预制的图表有这样的代码;
$('#graph2').graphify({
start: 'donut',
obj: {
id: 'lol',
legend: false,
showPoints: true,
width: 775,
legendX: 450,
pieSize: 200,
shadow: true,
height: 400,
animations: true,
x: [2000, 2001, 2002, 2003, 2004, 2005, 2006],
points: [17, 33, 64, 22, 87, 45, 38],
xDist: 90,
scale: 12,
yDist: 35,
grid: false,
xName: 'Year',
dataNames: ['Amount'],
design: {
lineColor: 'red',
tooltipFontSize: '20px',
pointColor: 'red',
barColor: 'blue',
areaColor: 'orange'
}
}
});我想将我的viewbag数据添加到x和point数组中,我尝试了类似这样的方法;
@foreach(var item in (List<string>Viewbag.student)
{x.push(item);} 但它根本不起作用。
发布于 2020-12-22 22:21:33
你不能那样把Razor和JavaScript混在一起。你必须记住,Razor渲染发生在服务器上,一旦完成,结果将作为静态超文本标记语言提供给浏览器,然后浏览器才会解释它并运行JavaScript。
因此,为了将信息从Razor传递到JavaScript,您需要以一种在渲染过程中幸存下来的方式进行传递。
这样做的一个好方法是将数据序列化为JSON,并将其存储在JavaScript代码可以访问的变量中。您可以在Razor视图中使用Json.Serialize方法来执行此操作:
<script>
var studentData = @Json.Serialize(ViewBag.Student);
var notesData = @Json.Serialize(ViewBag.Notes);
// now do something with those JavaScript variables…
</script>@…部件将由剃刀渲染器执行,因此渲染结果可能如下所示:
<script>
var studentData = ["student1", "student2", "student3"];
var notesData = [123, 456, 789];
// now do something with those JavaScript variables…
</script>该结果现在是有效的JavaScript,并且可以由客户端正确执行。
发布于 2020-12-22 22:26:25
首先,您不应该这样做,也不应该从控制器操作发送json对象,然后在视图中使用它。一个简单的解决方案是使用@:调用js代码,如下所示:
@foreach(var item in (List<string>ViewBag.student)
{
@:x.push("@item");
}因为@告诉我们这是剃刀或服务器端的c#代码,如果我们需要循环服务器端并在其中使用js做一些事情,我们可以使用@:来告诉它不是c#或服务器端的代码。
https://stackoverflow.com/questions/65410213
复制相似问题