Ink*_*key 11 .net c# linq asp.net-mvc 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;
Run Code Online (Sandbox Code Playgroud)
在我看来,我然后引用ViewData来显示这一点.运用
@model dynamic
Run Code Online (Sandbox Code Playgroud)
现在我在Index方法中有很多linq语句.对于我正在做的每个人ViewData[]
我希望有人可以展示我如何将一个以上的var从控制器传递到一个没有ViewData或ViewBag方法的视图.我将如何在我的视图中访问此内容.
Dar*_*ren 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);
}
Run Code Online (Sandbox Code Playgroud)
然后在您的视图中,您可以使用strongly typed模型而不是dynamic
@model ViewModel
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过以下方式迭代ViewModel属性:
foreach(var melt in Model.Melt1) {
// do what you require
}
Run Code Online (Sandbox Code Playgroud)
恕我直言,你应该ViewModel使用它创建一个传递数据.
创建一个类
public class MyViewModel
{
public <MeltFurnace1Type> MeltFurnace1{get;set;}
}
Run Code Online (Sandbox Code Playgroud)
在行动方法
public ActionResult Action()
{
MyViewModel vm = new MyViewModel();
vm.MeltFurnace1 = something;
return View("YourViewName", vm);
}
Run Code Online (Sandbox Code Playgroud)
在视图中
@model MyViewModel
//You can access your property using
Model.MeltFurnace1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
52873 次 |
| 最近记录: |