MVC 4 cómo pasar datos correctamente desde el controlador para ver

Actualmente tengo un controlador con una statement LINQ de la que estoy transmitiendo datos a mi vista. Estoy tratando de encontrar un método de encoding más eficiente y mejor para hacer esto. La statement de mi controlador doméstico es la siguiente.

Var Melt Furnace1 = (from item in db.tbl_dppITHr where item.ProductionHour >= StartShift && item.ProductionHour  x.Furnace1Total), ViewData["Furnace1Total"] = Melt.Furnace1; 

En mi opinión, entonces hago referencia a ViewData Para mostrar esto. Utilizando

  @model dynamic 

Ahora tengo bastantes declaraciones linq dentro del método Index. Y para cada uno estoy haciendo ViewData[]

Espero que alguien pueda mostrar cómo paso más de una var de un controlador a una vista sin los métodos ViewData o ViewBag. Y cómo podría obtener acceso a esto desde mi punto de vista.

    Debe crear un ViewModel con todos sus datos necesarios y luego pasarlo a la vista.

     public class ViewModel { public List Melt1 { get; set; } public void LoadMeltProperties() { if (Melt1 == null) { Melt1 = new List(); } 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); } 

    Luego, en su vista puede usar un modelo strongly typed lugar de dynamic

     @model ViewModel 

    A continuación, puede iterar sobre las propiedades de su ViewModel a través de:

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

    En mi humilde opinión, debe crear un ViewModel y pasar datos usando.

    Crear una clase

     public class MyViewModel { public  MeltFurnace1{get;set;} } 

    En método de acción

     public ActionResult Action() { MyViewModel vm = new MyViewModel(); vm.MeltFurnace1 = something; return View("YourViewName", vm); } 

    En vista

     @model MyViewModel //You can access your property using Model.MeltFurnace1 

    Si necesita pasar datos en realidad desde el controlador y sus datos dependen de los parámetros del controlador de entrada o del estado interno o tiene otras propiedades de “datos comerciales”, debe usar la pieza Modelo del patrón MVC :

    Los objetos modelo son las partes de la aplicación que implementan la lógica para el dominio de datos de la aplicación. A menudo, los objetos modelo recuperan y almacenan el estado del modelo en una base de datos. Por ejemplo, un objeto Producto puede recuperar información de una base de datos, operar en ella y luego escribir información actualizada en una tabla de productos en una base de datos de SQL Server.

    Puede ver detalles aquí o consultar Modelos y Validación en ASP.NET MVC, parte del tutorial de Microsoft.

    1. Agregar clase de modelo:

       public class Person { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } public string City { get; set; } } 
    2. Pase el objeto modelo a la vista:

       public ActionResult Index() { var model = GetModel(); return View(model); } 
    3. Agregue una vista fuertemente tipada a través de definir el tipo de modelo:

       @model Person 
    4. Use la variable Model en su vista:

       @Model.City 

    Use modelos en su lugar

     var Melt Furnace1 = (from item in db.tbl_dppITHr where item.ProductionHour >= StartShift && item.ProductionHour < = EndDate select item).Sum(x => x.Furnace1Total), return View("SomeVIew",MeltFurnace1) 

    En vista @model "TypeOfMeltFurnace1"

    Puede referenciar el modelo a la vista por propiedad Modelo