ASP.NET MVC 谷歌饼图控制器

康纳8630

我正在寻找一个朋友的代码来在我的 mvc 项目中实现谷歌图表。

我有一个从中提取数据的模型:

public partial class HoursPerSite
{
    public string SiteName { get; set; }
    public Nullable<decimal> SiteHours { get; set; }
}

图表已呈现,看起来不错,但图例显示的是 SiteHours 而不是我希望的 SiteName。

这是控制器部分:

// HOLIDAY PIE START
ViewBag.msg = db.HoursPerSites.Count().ToString();

var query = from r in db.HoursPerSites
            select new { Count = r.SiteHours, Value = r.SiteHours };

var result2 = query.ToList();

var datachart2 = new object[result2.Count];
int l = 0;
foreach (var i in result2)
{
    datachart2[l] = new object[] { i.Value.ToString(), i.Count };
    l++;
}
string datastr2 = JsonConvert.SerializeObject(datachart2, Formatting.None);
ViewBag.dataj2 = new HtmlString(datastr2);

// HOLIDAY PIE END

我想要它,所以饼图图例/键显示站点而不是时间。

迪米特里

不确定,但这是:

select new { Count = r.SiteHours, Value = r.SiteHours };

不应该是这样的:(站点名称):

select new { Count = r.SiteHours, Value = r.SiteName };

另外,如果我可以说,您的命名非常糟糕。这不会让你以后的工作更轻松。尝试更具体地命名您的变量和对象。

编辑:

  • 例如,您可以使用 Regions 而不是代码注释,这将使代码部分/部分的分离/排序/查看更加容易
  • 更好地命名您的变量将使您的生活变得更轻松,而且其他人在/使用您的代码时也会更轻松

我会将您当前的代码更改为:

请注意,我没有任何编辑器,并且可能存在语法错误

#region Holiday Pie Chart

ViewBag.msg = db.HoursPerSites.Count().ToString();

var queryHoursPerSites = from r in db.HoursPerSites
        select new { Count = r.SiteHours, Value = r.SiteHours };

var resultsQueryHoursPerSites = queryHoursPerSites.ToList(); // or HoursPerSitesCollection

var holidayPieChart = new object[resultsQueryHoursPerSites.Count];
int counter = 0; // 
foreach (var record in resultsQueryHoursPerSites)
{
    holidayPieChart[counter] = new object[] { record.Value.ToString(), record.Count };
counter++;
}

string deserialisedResults = JsonConvert.SerializeObject(holidayPieChart, Formatting.None);

// no idea what dataj2 is here ...
ViewBag.dataj2 = new HtmlString(deserialisedResults);


#endregion

我确信还有更多需要“改进”或“改变”,但在我看来,这已经是一种改进。

我相信其他人可以更好地阐述我在这里的建议:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章