Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Chart.JS标签字符串无法接受ViewBag数据_C#_Asp.net Core - Fatal编程技术网

C# Chart.JS标签字符串无法接受ViewBag数据

C# Chart.JS标签字符串无法接受ViewBag数据,c#,asp.net-core,C#,Asp.net Core,我正在ASP.NET Core MVC中开发一个简单的应用程序,我正在应用Chart.js来绘制图形图表。 问题出现在x轴的标记上。当我像这样手动编写JavaScript时,一切都完成了: labels: ['January', 'February', 'March'], 但是当我像这样调用@ViewBag.Exponate时,它不会显示: @Html.Raw(ViewBag.Exponate) 以下是控制器代码: var recordList = _db.OrderHeader.Wher

我正在ASP.NET Core MVC中开发一个简单的应用程序,我正在应用Chart.js来绘制图形图表。
问题出现在x轴的标记上。当我像这样手动编写JavaScript时,一切都完成了:

labels: ['January', 'February', 'March'],
但是当我像这样调用@
ViewBag.Exponate
时,它不会显示:

@Html.Raw(ViewBag.Exponate)
以下是控制器代码:

 var recordList = _db.OrderHeader.Where(u=>u.UserId==sain.Value && u.ShopId==Convert.ToInt32(_LoadSessions)).GroupBy(x => x.OrderDate.ToString("MMMM"))
                .Select(x => x.FirstOrDefault())
                .ToList();
            List<string> monthlists = recordList.Select(x => x.OrderDate.ToString("MMMM")).ToList();
                ViewBag.Exponate = string.Join(",", monthlists);

            var summation = _db.OrderHeader.Where(u => u.UserId == sain.Value && u.ShopId == Convert.ToInt32(_LoadSessions)).GroupBy(x => x.OrderDate)
                .Select(x => new
                {
                    countIf = x.Sum(y => y.OrderTotal)
                }).ToList();

            List<string> values = summation.Select(x => x.countIf.ToString()).ToList();
            ViewBag.valuesX= string.Join(",", values);
如果我这样投入:

labels: ['January', 'February', 'March'],
labels: [@Html.Raw(ViewBag.Exponate)],
<script type="text/javascript">
    let data = {
        labels : January,February,March
    };
</script>
它起作用了

但我不想那样。我希望从控制器列表对象加载标签,如下所示:

labels: ['January', 'February', 'March'],
labels: [@Html.Raw(ViewBag.Exponate)],
<script type="text/javascript">
    let data = {
        labels : January,February,March
    };
</script>

如何实现这一点?

您的序列化没有生成有效的JavaScript数组。相反,它的产出是这样的:

labels: ['January', 'February', 'March'],
labels: [@Html.Raw(ViewBag.Exponate)],
<script type="text/javascript">
    let data = {
        labels : January,February,March
    };
</script>

让数据={
标签:1月、2月、3月
};
您需要的是字符串的JavaScript数组:

<script type="text/javascript">
    let data = {
        labels : ["January","February","March"]
    };
</script>

让数据={
标签:[“一月”、“二月”、“三月”]
};
解决方案:使用Newtonsoft.Json进行序列化。例如

public IActionResult Index()
{
    var monthlists = new List<string> { "January", "February", "March" };

    // ViewBag.Exponate = string.Join(",", monthlists);

    ViewBag.Exponate = 
        Newtonsoft.Json.JsonConvert.SerializeObject(monthlists);

    return View();
}
public IActionResult Index()
{
var monthlists=新列表{“一月”、“二月”、“三月”};
//ViewBag.expontate=string.Join(“,”,monthlists);
ViewBag.Exponate=
Newtonsoft.Json.JsonConvert.SerializeObject(月列表);
返回视图();
}
当您这样做时,下面将生成有效的JavaScript数组

<script type="text/javascript">
    let data = {
        labels : @Html.Raw(ViewBag.Exponate)
    };
</script>

让数据={
标签:@Html.Raw(ViewBag.Exponate)
};
谢谢,现在可以用了

labels: @Html.Raw(ViewBag.Exponate) ,
我必须删除方括号中的
[@Html.Raw(ViewBag.Exponate)]
并将其留给 很有可能

@Html.Raw(ViewBag.Exponate)
和在控制器中

ViewBag.Exponate = Newtonsoft.Json.JsonConvert.SerializeObject(monthlists);

谢谢大家

当您使用
标签:[@HTML.Raw(ViewBag.Exponate)]
时,生成的HTML是什么样子的?