MVC 4如何从控制器正确传递数据到视图

我目前有一个带有LINQ语句的控制器,我将数据传递给我的视图。 我试图找到一个更有效和更好的编码方法来做到这一点。 我的家庭控制器声明如下。

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

在我看来,我然后引用ViewData来显示这一点。 运用

  @model dynamic 

现在我在Index方法中有很多linq语句。 对于每一个我正在做ViewData[]

我希望有人可以展示如何在没有ViewData或ViewBag方法的情况下将多个var从控制器传递到视图。 我将如何在我的视图中访问此内容。

您应该创建一个包含所需数据的ViewModel ,然后将其传递给视图。

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

然后在您的视图中,您可以使用strongly typed模型而不是dynamic模型

 @model ViewModel 

然后,您可以通过以下方式迭代ViewModel属性:

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

恕我直言,您应该使用它创建一个ViewModel传递数据。

创建一个类

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

在行动方法

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

在视图中

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

如果您需要实际从控制器传递数据并且其数据取决于内部状态或输入控制器参数或具有“业务数据”的其他属性,则应使用MVC模式的模型部分:

模型对象是实现应用程序数据域逻辑的应用程序的一部分。 通常,模型对象检索并存储数据库中的模型状态。 例如,Product对象可能从数据库检索信息,对其进行操作,然后将更新的信息写回SQL Server数据库中的Products表。

您可以在此处查看详细信息,或查看Microsoft教程的ASP.NET MVC部分中的模型和validation 。

  1. 添加模型类:

     public class Person { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } public string City { get; set; } } 
  2. 将模型对象传递给视图:

     public ActionResult Index() { var model = GetModel(); return View(model); } 
  3. 通过定义模型类型添加强类型视图 :

     @model Person 
  4. 在视图中使用Model变量:

     @Model.City 

改用模型

 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) 

在视图@model "TypeOfMeltFurnace1"

您可以通过属性Model在视图中引用模型