繁体   English   中英

Razor foreach循环和javascript

[英]Razor foreach loop and javascript

请帮忙。 我对剃须刀感到头疼。 我正在尝试使用Google图表来显示我的信息。

所以,这就是我的看法:

@section scripts
{
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript">
        google.load("visualization", "1", { packages: ["corechart"] });
        google.setOnLoadCallback(drawChart);
        function drawChart() {
            var data = google.visualization.arrayToDataTable([
          ['Date', 'DDM'],
                @foreach(var item in Model.ToList())
                {
                    <text>
                        ['item.Item1', 'item.Item2']
                    </text>
                }
        ]);

            var options = {
                title: 'Demande de marché',
                hAxis: { title: 'Date', titleTextStyle: { color: '#333'} }
            };

            var chart = new google.visualization.AreaChart(document.getElementById('chart_div'));
            chart.draw(data, options);
        }
    </script>
}

我使用foreach循环在模型( IEnumerable<Tuple<DateTime,int>> )上进行迭代,以在javascript函数中添加信息。 在设计时,我得到

Conditional compilation is turned off

有谁知道如何解决这个问题?

谢谢

编辑:这是控制器:

public ActionResult DDMPerDepartment(string department)
        {
            if (DepartmentsList == null) DepartmentsList = _db.Departments.ToList();
            ViewBag.DepartmentString = DepartmentsList.First().DepartmentName;

            IEnumerable<Tuple<DateTime,int>> points = _db.DepartmentNumbers.Where(x => x.Department.Id == 1).Select(x => new Tuple<DateTime, int>(x.Date, x.Number));
            return View(points);
        }

您在代码中有一些错误:

  1. 您将放置字符串'item.Item1'而不是变量item的属性Item1的值。 使用'@(item.Item1)'代替。

  2. foreach循环中,每个项目的末尾都缺少逗号。 因此,注入的javascript无效。 你需要

    <text> ['@(item.Item1)','@(item.Item2)'],</ text>

编辑:

好的,所以问题出在上面的LINQ to实体查询中。

IEnumerable<Tuple<DateTime,int>> points = _db.DepartmentNumbers.Where(x => x.Department.Id == 1).Select(x => new Tuple<DateTime, int>(x.Date, x.Number));

实体框架需要能够将此查询转换为SQL查询,因此不接受在查询中使用带有参数的构造函数。 上面的WhereSelect子句组合为一个SQL查询。

一个可能的解决方法是先评估需要在数据库上运行的表达式部分,将数据返回到内存,然后在内存中创建元组。 LINQ方法有很多重载,其中一些重载为实体创建LINQ表达式,一些重载在内存中执行LINQ操作。 您需要确保在内存中执行创建元组的select,即您不希望适用于IQueryable<T>的重载。

IEnumerable<Tuple<DateTime,int>> points = _db.DepartmentNumbers
    .Where(x => x.Department.Id == 1)  // LINQ to Entities WHERE
    .Select(x => new { x.Date, x.Number })  // LINQ to Entities SELECT
    .AsEnumerable()  // We want the next statement to be a select on IEnumerable instead of IQueryable.
    .Select(x => new Tuple<DateTime, int>(x.Date, x.Number)); // In-memory SELECT

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM