2013-12-12 6 views
0

Пожалуйста, помогите. У меня болит голова. Я пытаюсь использовать диаграммы Google для отображения моей информации.Razor foreach loop и javascript

Итак, это то, что у меня есть, на мой взгляд:

@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> 
} 

Я использую цикл Еогеасп для итерации по модели (IEnumerable<Tuple<DateTime,int>>), чтобы добавить информацию в яваскрипта функции. Во время разработки я получаю

Conditional compilation is turned off 

Кто-нибудь знает, как это решить?

Благодаря

Edit: Это контроллер:

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

возможно дубликат [условной компиляции сворачивается в бритве?] (Http://stackoverflow.com/questions/6655696/conditional-compilation-is-turned-off-in-razor) – wudzik

ответ

3

У вас есть какая-то ошибка в коде:

  1. Вы помещаете строку '' вместо item.Item1 от стоимости имущества Item1 переменной item. Вместо этого используйте '@(item.Item1)'.

  2. Вам не хватает запятой в конце каждого элемента в цикле foreach. Поэтому введенный javascript недействителен. Вам нужно

    < текст > [ '@ (item.Item1)', '@ (item.Item2)'], </текст >

EDIT:

ОК, так проблема в запросе LINQ для сущностей выше.

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

Лицо должно быть в состоянии преобразовать этот запрос в запрос SQL, и поэтому не принимает использование конструкторов с параметрами в рамках запроса. Предложения Where и Select объединены в один SQL-запрос.

Возможное обходное решение - сначала оценить часть выражения, которое необходимо запустить в базе данных, вернуть данные в память и затем создать кортежи в памяти. Существует много перегрузок методов LINQ, некоторые из которых создают выражения для LINQ для объектов, некоторые выполняют операции LINQ в памяти. Вы должны убедиться, что выбор, который создает кортеж, выполняется в памяти, т. Е. Вы не хотите перегрузки, которая применяется к 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 
+0

я получаю ошибка в инструкции foreach. И у меня все еще есть проблема. Во время выполнения у меня есть исключение в строке foreach, в которой указано: «В LINQ to Entities поддерживаются только конструкторы без параметров и инициализаторы». – Daniel

+0

Я вижу, поэтому проблема, возможно, в вашей модели. Можете ли вы опубликовать код модели? –

+0

Я отредактировал тему;) – Daniel