【问题标题】:Convert data inside a model to either a datatable or an array将模型内的数据转换为数据表或数组
【发布时间】:2020-03-13 21:13:34
【问题描述】:

我是 c# MVC 的新手,如果您能帮助我或至少给我一个关于如何解决这个问题的想法,我将不胜感激。 所以,我有这个方法可以过滤我的数据库中的一些信息并返回一个列表(System.Collections.Generic.List`1[Users.AspNetUser])。

 private static AspNetUser PopulateModel(string country, [Optional]int Agefrom, [Optional] int Ageto)
    {
        using (DBEntities entities = DBEntities()) //using ADOnet DB
        {
            AspNetUser model = new AspNetUser()  
            {
                WebUsers = (from c in entities.AspNetUsers
                            where c.Country == country || string.IsNullOrEmpty(country)
                            where c.AgeofUser >= Agefrom && c.AgeofUser <= Ageto || string.IsNullOrEmpty(Agefrom.ToString()) || string.IsNullOrEmpty(Ageto.ToString())
                            select c).ToList(),
                Countries = (from c in entities.AspNetUsers
                             select new SelectListItem { Text = c.Country, Value = c.Country }).Distinct().ToList(),
                Ages = (from c in entities.AspNetUsers
                        select c.AgeofUser)
                                      };
           return model;
        }
    }

之后,我尝试从过滤后的信息中显示图表,但 googlecharts 要求我提供数组或数据表来链接我的数据。我的问题是我找不到将该列表转换为 DT 或数组的方法。我会把脚本留给你以防万一。

<script>
        google.charts.load('current', { 'packages': ['table'] });
        google.charts.setOnLoadCallback(drawTable);

        function drawTable() {
            //here google asks for data in a DT or array with the method arraytotable()
            var data = new google.visualization.DataTable(@Model.WebUsers);//here I get "Uncaught SyntaxError: Unexpected end of input" for the bad input
            data.addColumn('string', 'Department');
            data.addColumn('number', 'Revenues');
            data.addRows(data1);
            var table = new google.visualization.Table(document.getElementById('table_div'));

            table.draw(data, { showRowNumber: true, width: '100%', height: '100%' });
        }

谢谢!

【问题讨论】:

  • 看起来你需要序列化你的 Model.WebUsers。基本上,当您的视图被渲染时,会在 Model.WebUsers 上调用 .ToString() 方法,因此您的脚本看起来更像...DataTable(System.List_SomeType),这当然会失败。您需要序列化数据JsonConvert.Serialize(Model.WebUsers),使其为json格式。

标签: c# asp.net-mvc linq charts google-visualization


【解决方案1】:

看看你的代码,

  1. 您使用了错误的格式来初始化可视化数据表和

  2. 您只需要 WebUsers,因为它已经包含所有记录。


这里有 2 个选项:

  • 您可以更改控制器中的模型以使用正确的格式,如https://developers.google.com/chart/interactive/docs/reference 所示。您可以使用 .toJson/JSONStringify 或 .toArray()

  • 来执行此操作
  • 或者更简单的选择,使用空初始化程序并使用 Webusers 记录创建变量行。修改您的脚本以使用以下代码;

function drawTable() {
   // create row variable, replace u.Name with a string property from your model
   var rows = [
      @{
         foreach(var u in Model.WebUsers){
            <text>['@u.Name',@u.AgeofUser],</text>
         }
      }
   ]

   // use empty initializer
   var data = new google.visualization.DataTable();

   // add your columns
   data.addColumn('string', 'Name');
   data.addColumn('number', 'Age');

   // add the row variable earlier
   data.addRows(rows);

   var table = new google.visualization.Table(document.getElementById('table_div'));
   table.draw(data, { showRowNumber: true, width: '100%', height: '100%' });
}

【讨论】:

  • OMFG 伙计,这个解释得很好,它应该得到比最佳答案更多的答案。我真的很感激它,它有效!
  • 再次感谢您!
  • 哈哈,很高兴我帮了忙!祝项目顺利。
猜你喜欢
  • 2018-01-07
  • 2013-05-26
  • 2016-05-15
  • 1970-01-01
  • 2016-01-20
  • 2021-05-06
  • 2013-12-25
  • 2012-12-17
  • 2015-08-10
相关资源
最近更新 更多