С первого взгляда я предположил, что ваша проблема, по-видимому, возникла из-за этой строки:
var result = System.Collections.Generic.List`1[InSiteDashboard.Models.InSiteStoreSalesSummaryTable];
Я думаю, что вы передаете список непосредственно в определение JS, предназначенное для создания массива JS, но Razor возвращает полностью -квалифицированное имя коллекции List<InSiteDashboard.Models.InSiteStoreSalesSummaryTable>
, потому что Razor неявно вызывал ToString()
в представлении вместо его повторения.
Поскольку List``1[InSiteDashboard.Models.InSiteStoreSalesSummaryTable]
не распознается как идентификатор или свойство JS, из-за неверного синтаксиса было выдано сообщение " Неожиданный конец ввода ".
Вы можете использовать сериализация модели для передачи коллекции List<T>
в виде массива JS, как в примере ниже (предполагается, что у вас есть директива модели с @model IEnumerable<InSiteStoreSalesSummaryTable>
или @model List<InSiteStoreSalesSummaryTable>
, как подразумевается return View(sales.ToList())
):
// standard way
var result = JSON.parse('@Html.Raw(Json.Encode(Model))');
// using Newtonsoft.Json library
var result = JSON.parse('@Html.Raw(JsonConvert.SerializeObject(Model))');
Вот пример реализации скрипта:
@model IEnumerable<InSiteStoreSalesSummaryTable>
<!-- other HTML elements, skipped for brevity -->
<script>
var result = JSON.parse('@Html.Raw(Json.Encode(Model))');
var datapoints = [];
for (var i = 0; i < result.length; i++) {
datapoints.push({ label: result[i].x, y: result[i].y });
}
$(function () {
var chart = new CanvasJS.Chart("chartContainer", {
theme: "light2",
zoomEnabled: true,
animationEnabled: true,
title: { text: "Line chart" },
data: [{
type: "line",
dataPoints: dataPoints,
}]
});
chart.render();
});
</script>