Как передать список элементов типа list из контроллера в представление
Привет. У меня есть несколько запросов, которые имеют некоторые выходы в своей избранной части. Теперь я хочу отправить эти запросы выходы из контроллера в поле зрения но есть ошибка при отправке их следующим образом:
Исключение InvalidOperationException: элемент модели, переданный в экземпляр класса viewdatadictionary имеет тип System.Коллекции.Generic.List`1[Приборная Панель.Модели.ChartModel]', но для этого экземпляра ViewDataDictionary требуется элемент модели типа 'System.Коллекции.Generic.List`1[Приборная Панель.Темпклассы.ChartListObjects]'.
например, один из моих запросов называется avg, и чтобы получить его данные, в контроллере есть часть моего кода, подобная следующей:
часть моего кода контроллера
{
namespace Dashboard.Controllers { public class HomeController : Controller { // private readonly ILogger<HomeController> _logger; private readonly CSSDDashboardContext _context; public HomeController(DashboardContext context) { _context = context; } public IActionResult Index() { var lstModel = new List<ChartModel>(); var vm = new List<ChartListObjects>(); foreach (var index in avg) { lstModel.Add(new ChartModel { DimensionOne = index.Month, Quantity = (int)index.Avg }); } vm.GrantedAvg = lstModel; foreach (var index in grantedAccessPercent) { lstModel1.Add(new ChartModel { DimensionOne = MonthName(index.Month), Quantity = (int)index.pct }); } vm.GrantedPercent = lstModel1; return view(vm); } }
Вот мой класс ChartModel
namespace Dashboard.Models { public class ChartModel { public int Quantity { get; set; } public string DimensionOne { get; set; } } }
Вот мой класс ChartListObjects:
namespace Dashboard.TempClasses { public class ChartListObjects { public List<ChartModel> GrantedPercent { get; set; } public List<ChartModel> AvgPercent { get; set; } } }
Я не могу понять, в чем проблема, я ценю любую помощь. Спасибо.
Что я уже пробовал:
namespace Dashboard.Models { public class ChartModel { public int Quantity { get; set; } public string DimensionOne { get; set; } } }
И вот моя часть зрения:
@using System.Linq; @model List<Dashboard.TempClasses.ChartListObjects> @{ var XLabels = Newtonsoft.Json.JsonConvert.SerializeObject(Model.Select(x => x.GrantedPercent.FirstOrDefault().DimensionOne).ToList()); var YValues = Newtonsoft.Json.JsonConvert.SerializeObject(Model.Select(x => x.GrantedPercent.FirstOrDefault().Quantity).ToList()); ViewData["Title"] = "Pie Chart"; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Pie</title> </head> <body> <div class="box-body"> <div class="chart-container"> <canvas id="chart" style="width:100%; height:500px"></canvas> </div> </div> </body> </html> <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.bundle.min.js"></script> <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> <script type="text/javascript"> $(function () { var chartName = "chart"; var ctx = document.getElementById(chartName).getContext('2d'); var data = { labels: @Html.Raw(XLabels), datasets: [{ label: "Drinks Chart", backgroundColor: [ 'rgba(255, 99, 132, 0.2)', 'rgba(54, 162, 235, 0.2)', 'rgba(255, 206, 86, 0.2)', 'rgba(75, 192, 192, 0.2)', 'rgba(153, 102, 255, 0.2)', 'rgba(255, 159, 64, 0.2)', 'rgba(255, 0, 0)', 'rgba(0, 255, 0)', 'rgba(0, 0, 255)', 'rgba(192, 192, 192)', 'rgba(255, 255, 0)', 'rgba(255, 0, 255)' ], borderColor: [ 'rgba(255,99,132,1)', 'rgba(54, 162, 235, 1)', 'rgba(255, 206, 86, 1)', 'rgba(75, 192, 192, 1)', 'rgba(153, 102, 255, 1)', 'rgba(255, 159, 64, 1)', 'rgba(255, 0, 0)', 'rgba(0, 255, 0)', 'rgba(0, 0, 255)', 'rgba(192, 192, 192)', 'rgba(255, 255, 0)', 'rgba(255, 0, 255)' ], borderWidth: 1, data: @Html.Raw(YValues) }] }; var options = { maintainAspectRatio: false, scales: { yAxes: [{ ticks: { min: 0, beginAtZero: true }, gridLines: { display: true, color: "rgba(255,99,164,0.2)" } }], xAxes: [{ ticks: { min: 0, beginAtZero: true }, gridLines: { display: false } }] } }; var myChart = new Chart(ctx, { options: options, data: data, type:'pie' }); }); </script>