or

I have a small application that returns SQL Server data to a cshtml page and populates a chart.
But, the code I used does not seem like the best solution and I was wondering if you could take a look at my code and give me an idea of a better way?
My code is below.
Model:
public class LoginHistory{ public Int32 LoginHistoryID { set; get; } public Decimal LoginDuration { set; get; } public string LoginApp { set; get; } public DateTime LoginDateTime { set; get; } public string LoginUser { set; get; } public string LoginLocation { set; get; } public string LoginEnvironment { set; get; }}CSHTML:
@model IEnumerable<AllanTest01.Models.LoginHistory>@{ Layout = null;}<!DOCTYPE html><html><head> <meta name="viewport" content="width=device-width" /> <title>Index</title> <!-- Kendo References --> <link rel="stylesheet" href="~/Content/kendo.common.min.css"> <link rel="stylesheet" href="~/Content/kendo.default.min.css"> <link href="~/Content/kendo.dataviz.min.css" rel="stylesheet" type="text/css" /> <script src="~/Scripts/jquery.min.js"></script> <script src="~/Scripts/kendo.all.min.js"></script> <script src="~/Scripts/kendo.aspnetmvc.min.js"></script></head><body> <div> Login History Charts 01 <br /><br /> filters_here <br /> Date Range: @(Html.Kendo().DateTimePicker().Name("StartDateTime")) - @(Html.Kendo().DateTimePicker().Name("EndDateTime")) <br /><br /> <table style="width:100%;"> <tr> @* loop thru the apps *@ @foreach (var item in Model) { <td> @(Html.Kendo().Chart() .Name(item.LoginApp.ToString().Replace(" ", "_")) .Title(item.LoginApp) .Legend(legend => legend .Position(ChartLegendPosition.Bottom) ) .Series(series => { series.Column(new double[] { 15.7, 16.7, 20, 23.5, 26.6 }).Name("World"); series.Column(new double[] { 67.96, 68.93, 75, 74, 78 }).Name("United States"); }) .CategoryAxis(axis => axis .Categories("2005", "2006", "2007", "2008", "2009") ) .ValueAxis(axis => axis .Numeric().Labels(labels => labels.Format("{0}%")) ) .Tooltip(tooltip => tooltip .Visible(true) .Format("{0}%") ) .HtmlAttributes(new { style = "width:300px;" }) ) </td> } </tr> </table> @foreach (var item in Model){ <p>@item.LoginHistoryID | @item.LoginDuration | @item.LoginApp | @item.LoginDateTime | @item.LoginUser | @item.LoginLocation</p>} </div></body></html>HomeController.cs:
using AllanTest01.Models;using System;using System.Collections.Generic;using System.Data;using System.Data.SqlClient;using System.Linq;using System.Web;using System.Web.Mvc;namespace AllanTest01.Controllers{ public class HomeController : Controller { // // GET: /Home/ public ActionResult Index() { var items = GetLoginHistory(); var newItems = (from p in items select new LoginHistory { LoginHistoryID = p.Field<Int32>("LoginHistoryID"), LoginDuration = p.Field<Decimal>("LoginDuration"), LoginApp = p.Field<String>("LoginApp"), LoginDateTime = p.Field<DateTime>("LoginDateTime"), LoginUser = p.Field<String>("LoginUser"), LoginLocation = p.Field<String>("LoginLocation") }).ToList(); return View(newItems); } private List<DataRow> GetLoginHistory() { List<DataRow> list = null; string srtQry = @"Select LoginHistoryID, LoginDuration, LoginApp, LoginDateTime, LoginUser, LoginLocation, LoginEnvironment From LoginHistories"; string connString = "Data Source=.\\sqlexpress;Initial Catalog=AllanTest;Integrated Security=True"; using (SqlConnection conn = new SqlConnection(connString)) { using (SqlCommand objCommand = new SqlCommand(srtQry, conn)) { objCommand.CommandType = CommandType.Text; DataTable dt = new DataTable(); SqlDataAdapter adp = new SqlDataAdapter(objCommand); conn.Open(); adp.Fill(dt); if (dt != null) { list = dt.AsEnumerable().ToList(); } } } return list; } }}open: function (e) { // TODO: fikse knapper: // debugger; var content = $(e.sender.content()); content.find(".popup-fieldset-wrapper").append(content.find(".k-button")); content.find(".k-button").wrapAll("<div class='buttons' style='float: right;'/>"); content.find(".k-button.k-grid-update").addClass("save"); content.find(".k-button.k-grid-cancel").addClass("cancel"); e.sender.content(content); //at first i was converting content back to html(), but seems much better when just putting the jQuery object into content. // e.sender.center(); }