I found a tutorial on how to pass one array list with sql data in it through "public IActionResult Index()" but I need multiple Lists with data from multiple sql query statements passed through my index.cshtml page. I am using ASP.Net Core MVC. I have multiple Models which I will show and the HomeController. I can show the cshtml too. I tried to pass all the query statements through one List<> but it would print out multiple of the first query statement empty.
CampaignCreat.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace CampaignReportDemo.Models
{
public class CampaignCreat
{
public string CampaignCreative { get; set; }
}
}
WebBrowser.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace CampaignReportDemo.Models
{
public class WebBrowser
{
public string SoftwareName { get; set; }
public string number1 { get; set; }
}
}
DeviceClick.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace CampaignReportDemo.Models
{
public class DeviceClick
{
public string HardwareType { get; set; }
public string number { get; set; }
}
}
CampaignSummary.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace CampaignReportDemo
{
public class CampaignSummary
{
public string FriendlyFrom { get; set; }
public string BroadcastDate { get; set; }
public string EmailsOrdered { get; set; }
public string Opens { get; set; }
public string Clicks { get; set; }
}
}
HomeController.cs
using CampaignReportDemo.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using System.Data.SqlClient;
namespace CampaignReportDemo.Controllers
{
public class HomeController : Controller
{
SqlCommand com = new SqlCommand();
SqlDataReader dr;
SqlConnection con = new SqlConnection();
List<CampaignSummary> CampaignSummaries = new List<CampaignSummary>();
List<DeviceClick> DeviceClicks = new List<DeviceClick>();/*I need these Lists to pass
through IActionResult Index()*/
List<WebBrowser> WebBrowsers = new List<WebBrowser>();
List<CampaignCreat> CampaignCreats = new List<CampaignCreat>();
private readonly ILogger<HomeController> _logger;
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
con.ConnectionString = CampaignReportDemo.Properties.Resources.ConnectionString;
}
public IActionResult Index()
{
FetchData();
/*I can get one list through but not multiple*/
return View(CampaignSummaries);
}
private void FetchData()
{
if(CampaignSummaries.Count > 0 && DeviceClicks.Count > 0 && WebBrowsers.Count > 0 &&
CampaignCreats.Count > 0 )
{
CampaignSummaries.Clear();
DeviceClicks.Clear();
WebBrowsers.Clear();
CampaignCreats.Clear();
}
try
{
con.Open();
com.Connection = con;
com.CommandText = "select FriendlyFrom, EmailsOrdered, BroadcastDate, Opens,
Clicks from CampaignResults where CampaignId = 24896;" +
";select HardwareType, count(*) as number from User_Details Group by
HardwareType;" +
"select SoftwareName, count(*) as number1 from User_Details Group By
SoftwareName;" +
"select CampaignCreative from CampaignAdCopy where CampaignId = 24896;";
dr = com.ExecuteReader();
while (dr.Read())
{
CampaignSummaries.Add(new CampaignSummary() { FriendlyFrom =
dr["FriendlyFrom"].ToString(), BroadcastDate = dr["BroadcastDate"].ToString(),
EmailsOrdered = dr["EmailsOrdered"].ToString()
, Opens = dr["Opens"].ToString(), Clicks = dr["Clicks"].ToString()});
}
dr.NextResult();
while (dr.Read())
{
DeviceClicks.Add(new DeviceClick() { HardwareType =
dr["HardwareType"].ToString(), number = dr["number"].ToString() });
}
dr.NextResult();
while (dr.Read())
{
WebBrowsers.Add(new WebBrowser() { SoftwareName =
dr["SoftwareName"].ToString(), number1 = dr["number1"].ToString() });
}
dr.NextResult();
while (dr.Read())
{
CampaignCreats.Add(new CampaignCreat() { CampaignCreative =
dr["CampaignCreative"].ToString() });
}
con.Close();
}
catch (Exception ex)
{
throw ex;
}
}
public IActionResult Privacy()
{
return View();
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ??
HttpContext.TraceIdentifier });
}
}
}
Index.cshtml
@{
ViewData["Title"] = "Home Page";
}
<section>
<table id="first">
<tr>
<th colspan="2">Campaign Report</th>
</tr>
@{
if (Model != null)
{
foreach (var Data in Model)
{
<tr>
<td>Name:</td>
<td>@Data.FriendlyFrom</td>
</tr>
<tr>
<td>Date/Time:</td>
<td>@Data.BroadcastDate</td>
</tr>
<tr>
<td>Quantity:</td>
<td>@Data.EmailsOrdered</td>
</tr>
<tr>
<td>Opens:</td>
<td>@Data.Opens</td>
</tr>
<tr>
<td>Opens%:</td>
<td></td>
</tr>
<tr>
<td>Clicks:</td>
<td>@Data.Clicks</td>
</tr>
<tr>
<td>Clicks%:</td>
<td></td>
</tr>
}
}
}
</table>
<table>
<tr>
<th colspan="2">Device Stats By Click</th>
</tr>
@{
if (Model != null)
{
foreach (var Data in Model)
{
<tr>
<td>@Data.HardwareType</td>
<td>@Data.number</td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
}
}
}
</table>
</section>
<aside valign="bottom">
<table>
<tr>
<th colspan="2">Campaign Creative</th>
@{
if (Model != null)
{
foreach (var Data in Model)
{
<tr>
<td>@Data.CampaignCreative</td>
</tr>
}
}
}
</table>
</aside>
<article>
<table>
<tr>
<th colspan="2">Web Browser Stats By Click</th>
</tr>
@{
if (Model != null)
{
foreach (var Data in Model)
{
<tr>
<td>@Data.SoftwareName @Data.number1</td>
<td></td>
<td></td>
<td></td>
</tr>
}
}
}
</table>
</article>