Search code examples
c#.netasp.net-mvclinqasp.net-mvc-4

MVC 4 how pass data correctly from controller to view


I currently have a controller with a LINQ statement that i am passing data from to my view. I am trying to find a more efficient and better coding method to do this. My home controller statement is as follows.

Var Melt
  Furnace1 =
           (from item in db.tbl_dppITHr
           where item.ProductionHour >= StartShift && item.ProductionHour <= EndDate
           select item).Sum(x => x.Furnace1Total),

ViewData["Furnace1Total"] = Melt.Furnace1;

In my view i then reference the ViewData To show this. Using

 @model dynamic

Now i have quite alot of linq statements inside the Index method. And for each one i am doing the ViewData[]

I am hoping that someone can show how i pass more than one var from a controller across to a view without the ViewData or ViewBag methods. And how i would get access to this within my view.


Solution

  • You should create a ViewModel with all of your data needed and then pass that down to the view.

    public class ViewModel 
    {
       public List<int> Melt1 { get; set; }
    
       public void LoadMeltProperties() 
       {
    
           if (Melt1 == null) 
           {
              Melt1 = new List<int>();
           }
    
           Melt1 = (from item in db.tbl_dppITHr
           where item.ProductionHour >= StartShift && item.ProductionHour <= EndDate
           select item).Sum(x => x.Furnace1Total).ToList();
       }
    
       public ViewModel Load()
       {
           LoadMeltProperties();
           return this;
       }
    }
    
    public ActionResult YourControllerAction() 
    {
          var vm = new ViewModel().Load();
          return View("ViewName", vm);
    }
    

    Then in your View you can use a strongly typed model rather than dynamic

    @model ViewModel
    

    You can then iterate over your ViewModel properties via:

    foreach(var melt in Model.Melt1) {
         // do what you require
    }