首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在视图页面的javascript上使用Viewbag数据

在视图页面的javascript上使用Viewbag数据
EN

Stack Overflow用户
提问于 2020-12-22 22:12:59
回答 2查看 50关注 0票数 0

在我的项目ı中,我尝试使用javascript图表和数据库中的数据,

首先,我已经用viewbag发送了我的数据

代码语言:javascript
复制
 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中,预制的图表有这样的代码;

代码语言: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数组中,我尝试了类似这样的方法;

代码语言:javascript
复制
@foreach(var item in (List<string>Viewbag.student)
{x.push(item);} 

但它根本不起作用。

EN

回答 2

Stack Overflow用户

发布于 2020-12-22 22:21:33

你不能那样把Razor和JavaScript混在一起。你必须记住,Razor渲染发生在服务器上,一旦完成,结果将作为静态超文本标记语言提供给浏览器,然后浏览器才会解释它并运行JavaScript。

因此,为了将信息从Razor传递到JavaScript,您需要以一种在渲染过程中幸存下来的方式进行传递。

这样做的一个好方法是将数据序列化为JSON,并将其存储在JavaScript代码可以访问的变量中。您可以在Razor视图中使用Json.Serialize方法来执行此操作:

代码语言:javascript
复制
<script>
var studentData = @Json.Serialize(ViewBag.Student);
var notesData = @Json.Serialize(ViewBag.Notes);

// now do something with those JavaScript variables…
</script>

@…部件将由剃刀渲染器执行,因此渲染结果可能如下所示:

代码语言:javascript
复制
<script>
var studentData = ["student1", "student2", "student3"];
var notesData = [123, 456, 789];

// now do something with those JavaScript variables…
</script>

该结果现在是有效的JavaScript,并且可以由客户端正确执行。

票数 1
EN

Stack Overflow用户

发布于 2020-12-22 22:26:25

首先,您不应该这样做,也不应该从控制器操作发送json对象,然后在视图中使用它。一个简单的解决方案是使用@:调用js代码,如下所示:

代码语言:javascript
复制
@foreach(var item in (List<string>ViewBag.student)
{
  @:x.push("@item");
}

因为@告诉我们这是剃刀或服务器端的c#代码,如果我们需要循环服务器端并在其中使用js做一些事情,我们可以使用@:来告诉它不是c#或服务器端的代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65410213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档