Я столкнулся с ошибкой javascript с диаграммами Google. У меня есть это для работы с другим запросом, но мне нужно, чтобы результат запроса ниже отображался. Проблема на данный момент в том, что диаграмма не появляется. Любые мысли по отладке этого?
Uncaught (in promise) Error: Type mismatch. Value 1 does not match type string in column index 0
Вот мой контроллер:
#region Total Hours Per Month
var querythpmpro = (from r in db.HolidayRequestForms
where r.EmployeeID == id
group r by r.MonthOfHoliday into g
select new { Value = g.Key, Count = g.Sum(h => h.HoursTaken) }
).OrderBy(e => e.Value);
var resultthpmpro = querythpmpro.ToList();
var datachartthpmpro = new object[resultthpmpro.Count];
int Q = 0;
foreach (var i in resultthpmpro)
{
datachartthpmpro[Q] = new object[] { i.Value, i.Count};
Q++;
}
string datathpmpro = JsonConvert.SerializeObject(datachartthpmpro, Formatting.None);
ViewBag.datajthpmpro = new HtmlString(datathpmpro);
#endregion
И мой скрипт:
<script>
var datathpmpro = '@ViewBag.datajthpmpro';
var datassthpmpro = JSON.parse(datathpmpro);
</script>
<script type = "text/javascript">
// Load the Visualization API and the corechart package.
google.charts.load('current', { 'packages': ['corechart'] });
// Set a callback to run when the Google Visualization API is loaded.
google.charts.setOnLoadCallback(drawChartA);
// Callback that creates and populates a data table,
// instantiates the pie chart, passes in the data and
// draws it.
function drawChartA() {
// Create the data table.
var data = new google.visualization.DataTable();
data.addColumn('string', 'Value');
data.addColumn('number', 'Count');
data.addRows(datassthpmpro);
// Set chart options
var options = {
'title': 'Holiday Hours Taken Per Month',
'width': 600,
'height': 350,
'hAxis': {title: 'Month Number'},
'vAxis': {title: 'Holiday Hours Taken'},
'is3D': true,
'legend': 'none'
};
// Instantiate and draw our chart, passing in some options.
var chart = new google.visualization.LineChart(document.getElementById('chartTHPMpro_div'));
chart.draw(data, options);
}
Я бы хотел, чтобы в результате появилась диаграмма Google, в которой используется приведенный выше запрос.
Хорошо, я не уверен, где в С# я преобразовываю его в строку, хотя
@jdweng Я преобразовал значение в строку, и это сработало!! Спасибо! Если ответишь отмечу как правильный



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Проблема, похоже, исходит из этих строк, которые не соответствуют типам данных i.Value и определенному типу данных столбца в экземпляре google.visualization.DataTable:
// Controller - returns i.Value as int
datachartthpmpro[Q] = new object[] { i.Value, i.Count };
// JS - defined as string column
data.addColumn('string', 'Value');
Предположим, что i.Value содержит целочисленное значение, если вы хотите сохранить addColumn как есть, вы должны передать его как строку с ToString():
datachartthpmpro[Q] = new object[] { i.Value.ToString(), i.Count };
Или, если вы хотите вместо этого использовать целое число без изменения кода действия контроллера, вы можете попробовать number:
data.addColumn('number', 'Value');
Однако, если вы хотите передать столбец Value как целое число с addRow(), сохраняя настройку data.addColumn('string', 'Value'), вы можете попробовать parseInt() при итерации массива:
data.addColumn('string', 'Value');
for (var i = 0; i < datassthpmpro.length; i++) {
intVal = parseInt($.trim(datassthpmpro[i][0]));
data.addRow([intVal, datassthpmpro[i][1]]);
}
Использованная литература:
Похоже, что в столбце скрипта ноль — это значение, а столбец 1 — это количество. Сообщение об ошибке указывает, что в С# вы получаете целое число, а затем пытаетесь преобразовать его в строку.