#c# #asp.net #razor #chart.js
#c# #asp.net #razor #chart.js
Вопрос:
Я использую ChartJS для рисования диаграммы. Только разделенные значения могут быть обработаны для меток принятых значений и данных. Но в моем случае текст монолитный. В общем, я никак не могу отформатировать текст при передаче списка для просмотра.
Вид
<script>
function chart1() {
var ctx = document.getElementById('myChart');
window.myChart = new Chart(ctx, {
type: 'bar',
data: {
labels: [@foreach (var m in Model) { @m.NameArea}],
datasets: [{
label: 'Районы',
data: [@foreach (var m in Model) { @m.AreaParameter}],
backgroundColor: [
'rgba(255, 99, 132, 0.2)'
],
borderColor: [
'rgba(255, 99, 132, 1)'
],
borderWidth: 1
}]
},
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero: true
}
}]
}
}
});
};</script>
Контроллер
public ActionResult Index()
{
string connString = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\database.mdf;Integrated Security=True";
using (SqlConnection conn = new SqlConnection(connString))
{
List<Area> currentArea = new List<Area>();
using (var cmd = new SqlCommand("SELECT NameArea, AreaParameter FROM FileTable", conn))
{
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
if (reader.HasRows)
{
List<Area> dictList = new List<Area>();
while (reader.Read())
{
currentArea.Add(new Area()
{
//Id = Int32.Parse(reader["id"].ToString()),
NameArea = reader["NameArea"].ToString(),
AreaParameter = Int32.Parse(reader["AreaParameter"].ToString())
});
}
}
conn.Close();
}
conn.Open();
SqlCommand comDelete = new SqlCommand("DELETE FROM FileTable", conn);
comDelete.ExecuteNonQuery();
conn.Close();
return View(currentArea);
}
}
В результате скрипт получает список
labels: [OneTwoThreeFour]
Я хотел бы видеть
labels: ['One', 'Two', 'Three', 'Four']
Мне действительно нужна помощь.
Ответ №1:
Попробуйте отформатировать вывод. Должно сработать что-то вроде приведенного ниже.
labels: @String.Join(",", Model.Select(x => $"'{x.NameArea}'"))
Итак, в основном, что это делает, вместо foreach мы выбираем только область имен из всех моделей в вашем списке. Этот выбор также добавляет одинарные кавычки вокруг вашего имени, используя интерполяцию строк. Оттуда мы выполняем объединение, чтобы список разделялся запятой.
Надеюсь, это сработает для вас.
Комментарии:
1. в общем, я сделал почти то же самое, только намного хуже)
labels: [@foreach (var m in Model) {@Html.Raw("'" String.Join("', '", m.NameArea) "', ")}]
но все равно спасибо, это заставляет меня оптимизировать код.2. Нет проблем. Если это работает, пожалуйста, отметьте это как ответ. Хорошего дня.