关于c#:MVC 4如何从控制器正确传递数据到视图

MVC 4 how pass data correctly from controller to view

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

1
2
3
4
5
6
7
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来显示这一点。运用

1
 @model dynamic

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

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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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

1
@model ViewModel

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

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


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

创建一个类

1
2
3
4
public class MyViewModel
{
    public <MeltFurnace1Type> MeltFurnace1{get;set;}
}

在行动方法

1
2
3
4
5
6
public ActionResult Action()
{
      MyViewModel vm = new MyViewModel();
      vm.MeltFurnace1 = something;
      return View("YourViewName", vm);
}

在视图中

1
2
3
4
@model MyViewModel

//You can access your property using
Model.MeltFurnace1


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

Model objects are the parts of the application that implement the
logic for the application's data domain. Often, model objects retrieve
and store model state in a database. For example, a Product object
might retrieve information from a database, operate on it, and then
write updated information back to a Products table in a SQL Server
database.

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

  • 添加模型类:

    1
    2
    3
    4
    5
    6
    7
    public class Person
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
        public string City { get; set; }
    }
  • 将模型对象传递给视图:

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

    1
    @model Person
  • 在视图中使用Model变量:

    1
    @Model.City

  • 改用模型

    1
    2
    3
    4
    5
    6
    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在视图中引用模型