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

时间:2013-09-04 08:02:06

标签: c# .net asp.net-mvc linq asp.net-mvc-4

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

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;

在我看来,我引用了ViewData来显示这个。使用

 @model dynamic

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

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

4 个答案:

答案 0 :(得分:11)

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

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

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

@model ViewModel

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

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

答案 1 :(得分:6)

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

创建一个类

public class MyViewModel
{
    public <MeltFurnace1Type> 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

答案 2 :(得分:2)

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

  

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

您可以查看详细信息here或查看Microsoft教程的Models and Validation in ASP.NET MVC部分。

  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. 通过定义模型类型添加strongly typed View

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

    @Model.City
    

答案 3 :(得分:1)

使用模型

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

在视图中引用模型