Импорт данных из модели в представление приводит к ошибке, которую я не могу решить

Возможно, вы также можете сделать это в хранимой процедуре:

DROP PROCEDURE IF EXISTS median;
DELIMITER //
CREATE PROCEDURE median (table_name VARCHAR(255), column_name VARCHAR(255), where_clause VARCHAR(255))
BEGIN
  -- Set default parameters
  IF where_clause IS NULL OR where_clause = '' THEN
    SET where_clause = 1;
  END IF;

  -- Prepare statement
  SET @sql = CONCAT(
    "SELECT AVG(middle_values) AS 'median' FROM (
      SELECT t1.", column_name, " AS 'middle_values' FROM
        (
          SELECT @row:=@row+1 as `row`, x.", column_name, "
          FROM ", table_name," AS x, (SELECT @row:=0) AS r
          WHERE ", where_clause, " ORDER BY x.", column_name, "
        ) AS t1,
        (
          SELECT COUNT(*) as 'count'
          FROM ", table_name, " x
          WHERE ", where_clause, "
        ) AS t2
        -- the following condition will return 1 record for odd number sets, or 2 records for even number sets.
        WHERE t1.row >= t2.count/2
          AND t1.row <= ((t2.count/2)+1)) AS t3
    ");

  -- Execute statement
  PREPARE stmt FROM @sql;
  EXECUTE stmt;
END//
DELIMITER ;


-- Sample usage:
-- median(table_name, column_name, where_condition);
CALL median('products', 'price', NULL);
3
задан Miguel Cordero 19 March 2019 в 08:12
поделиться

4 ответа

Если вы хотите использовать свойства моделей представления в javascript, вам нужно конвертировать его, например,

var datos = JSON.stringify(@Model.Data);
var etiquetas = JSON.stringify(@Model.Labels);

Или вы можете использовать

var datos = @Html.Raw(Json.Serialize(@Model.Data));
var etiquetas = @Html.Raw(Json.Serialize(@Model.Labels));
0
ответ дан er-sho 19 March 2019 в 08:12
поделиться

Чтобы передать массив на стороне сервера в переменную массива на стороне клиента, вы можете использовать функцию JSON.parse() на стороне клиента с Json.Encode():

var datos = JSON.parse(@Html.Raw(Json.Encode(Model.Data));
var etiquetas = JSON.parse(@Html.Raw(Json.Encode(Model.Labels));

Или, если у вас есть пакет Newtonsoft.Json, вы следует попробовать использовать метод JsonConvert.SerializeObject() :

var datos = JSON.parse(@Html.Raw(JsonConvert.SerializeObject(Model.Data));
var etiquetas = JSON.parse(@Html.Raw(JsonConvert.SerializeObject(Model.Labels));

Если массив передается напрямую, как @Model.Data, неявно вызывается ToString(), что приводит к полному определению имени типа массива назначаться вместо содержимого сериализованного массива.

0
ответ дан Tetsuya Yamamoto 19 March 2019 в 08:12
поделиться

У вас здесь необычное сочетание JavaScript и C #.
Обычно вы выбираете данные из конечной точки WebAPI.

Самым простым (наименьшим) исправлением было бы

 // in the controller
 vm.Data = JsonConvert.Serialize( DataReporting(vm));
 vm.Labels = JsonConvert.Serialize(LabelReporting(vm));

Вам нужно будет сделать данные и метки простыми string свойствами.

 // in the View
 var datos =  JSon.Parse(@Model.Data);
 var etiquetas = JSon.Parse(@Model.Labels );

Обратите внимание, что это не было проверено.

0
ответ дан Henk Holterman 19 March 2019 в 08:12
поделиться

Как показано в документации к chart.js , здесь есть ссылка на документацию по chart.js , вы должны предоставить набор данных и метку в формате массива.

Попробуйте использовать передачу ienumerable для передачи модели для просмотра, что повлияет на преобразование в массив. Вашему классу должно понравиться это

public class ReportViewModel { 
   public innumerable<data> cData { get; set; } 
   public innumerable<label> cdata { get; set; }
}

И ваш класс для данных и метки должен быть определен в пространстве имен модели Модель данных:

Public class data{
    Public int value{get;set;}
}

Модель метки

Public class label{
    Public string name{get;set;}
}

И с учетом этого вы должны импортировать модель, которую необходимо передать из контроллера, и вы можете напрямую использовать ее, а используя механизм бритвы, вы можете преобразовать ее также в массив во время выполнения с помощью функции toarray

0
ответ дан N babin 19 March 2019 в 08:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: