ASP.NET Контроллер круговых диаграмм MVC Google

#c# #asp.net-mvc #model-view-controller

#c# #asp.net-mvc #модель-вид-контроллер #модель-представление-контроллер

Вопрос:

Я ищу код друзей для внедрения Google charts в мой проект 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
  

Я бы хотел, чтобы в условных обозначениях круговой диаграммы отображался сайт, а не часы.

Ответ №1:

Не уверен, но так ли это:

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

Не должно быть этого: (SiteName):

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

Кроме того, ваше именование, если можно так выразиться, очень плохое. Это не облегчит вашу будущую работу. Попробуйте назвать свои переменные и objects более конкретно.

Редактировать:

  • Вы можете использовать регионы вместо комментариев к коду, например, что значительно упростит разделение / упорядочивание / просмотр частей / разделов кода
  • Улучшение именования ваших переменных облегчит вашу жизнь, а также жизнь других людей, работающих над вашим кодом

Я бы изменил ваш текущий код на этот:

Пожалуйста, обратите внимание, что у меня нет никакого редактора и что могут быть синтаксические ошибки

 #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
  

Я уверен, что есть еще что «улучшить» или «изменить», но это, на мой взгляд, уже было бы улучшением.

Я уверен, что другие могут еще лучше разработать то, что я предлагаю здесь 🙂

Комментарии:

1. Спасибо, это сработало! Это код моих друзей. Единственное мое название — SiteHours, SiteName. Если это то, что вы имеете в виду, не могли бы вы объяснить, почему? Я хотел бы стать лучше!

2. Добро пожаловать, я отредактировал свой первоначальный ответ. SiteHours и SiteName — хорошие названия (я мало что знаю о контексте проекта, над которым вы работаете).

3. «Вы можете использовать регионы» — регионы непопулярны у некоторых людей , включая меня. Лучший способ «разделения / упорядочения / просмотра частей / разделов кода» — это использовать метод .

4. Я имею в виду визуальную, а не логическую структуру. Если у вас есть множество методов, лично я предпочитаю, чтобы они были (в области, которую вы можете свернуть / расформировать при необходимости), это значительно упростит и ускорит «навигацию» в крупномасштабном проекте вместо того, чтобы разделять их (частичные классы и так далее), Но это личное предпочтение. Я использую принципы разделения задач и инкапсуляции (SOLID, ООП, шаблоны проектирования …) для своего кода, но, как было объяснено выше, я использую регионы. Мне действительно нравится концепция антирегиона-Legion, довольно аккуратная «концепция» 🙂

5. @Dimitri Спасибо за совет, Дмитрий, в этом много смысла!! Теперь я определенно буду использовать regions!