MVC 4 comment passer correctement les données du contrôleur pour les visualiser

J’ai actuellement un contrôleur avec une déclaration LINQ que je passe des données à mon avis. J’essaie de trouver une méthode de codage plus efficace et meilleure pour le faire. Ma déclaration de contrôleur de la maison est la suivante.

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

À mon avis, je fais ensuite référence à ViewData pour montrer cela. En utilisant

  @model dynamic 

Maintenant, j’ai beaucoup de déclarations linq dans la méthode Index. Et pour chacun je fais le ViewData[]

J’espère que quelqu’un pourra montrer comment je passe plusieurs variables d’un contrôleur à une vue sans les méthodes ViewData ou ViewBag. Et comment j’aurais access à cela de mon sharepoint vue.

Vous devez créer un ViewModel avec toutes vos données nécessaires, puis le transmettre à la vue.

 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); } 

Ensuite, dans votre vue, vous pouvez utiliser un modèle strongly typed plutôt que dynamic

 @model ViewModel 

Vous pouvez ensuite parcourir vos propriétés ViewModel via:

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

IMHO, vous devriez créer un ViewModel et transmettre des données en l’utilisant.

Créer une classe

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

Méthode en action

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

En vue

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

Si vous devez réellement transmettre des données du contrôleur et que celles-ci dépendent de l’état interne ou des parameters du contrôleur d’entrée ou possèdent d’autres propriétés de “données de gestion”, vous devez utiliser la partie Modèle à partir du modèle MVC :

Les objects de modèle sont les parties de l’application qui implémentent la logique pour le domaine de données de l’application. Souvent, les objects de modèle récupèrent et stockent l’état du modèle dans une firebase database. Par exemple, un object Product peut extraire des informations d’une firebase database, y opérer, puis écrire les informations mises à jour dans une table Products d’une firebase database SQL Server.

Vous pouvez voir les détails ici ou consulter la section Modèles et validation dans ASP.NET MVC de Microsoft.

  1. Ajouter une classe de modèle:

     public class Person { public int Id { get; set; } public ssortingng Name { get; set; } public int Age { get; set; } public ssortingng City { get; set; } } 
  2. Passer l’object de modèle à la vue:

     public ActionResult Index() { var model = GetModel(); return View(model); } 
  3. Ajouter une vue fortement typée via le type de modèle défini:

     @model Person 
  4. Utilisez la variable Model dans votre vue:

     @Model.City 

Utilisez des modèles à la place

 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 vue @model "TypeOfMeltFurnace1"

Vous pouvez référencer le modèle dans la vue par propriété Modèle