【问题标题】:How to split a List into View in C#如何在 C# 中将列表拆分为视图
【发布时间】:2020-11-05 12:13:35
【问题描述】:

我正在使用 ChartJS 绘制图表。在接受值标签和数据上只能处理分隔值。但就我而言,文本是单一的。一般来说,在将 List 传递给 View 时,我无法以任何方式格式化文本。

查看

<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']

我真的需要帮助。

【问题讨论】:

    标签: c# asp.net razor chart.js


    【解决方案1】:

    尝试格式化您的输出。像下面这样的东西应该可以工作。

    labels: @String.Join(",", Model.Select(x => $"'{x.NameArea}'"))
    

    所以基本上这是在做的不是 foreach,而是从列表中的所有模型中选择名称区域。该 Select 还使用字符串插值在您的 NameArea 周围添加单引号。从那里我们正在做一个连接以逗号分隔列表。

    希望这对你有用。

    【讨论】:

    • 总的来说,我做了几乎相同的事情,只是更糟)labels: [@foreach (var m in Model) {@Html.Raw("'"+String.Join("', '", m.NameArea)+"', ")}] 但无论如何,谢谢,它让我优化了代码。
    • 没问题。如果有效,请将其标记为答案。祝你有美好的一天。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    • 2018-01-29
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多