現在、ビューにデータを渡す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をビューに渡す方法を誰かが示すことができることを願っています。そして、私は私のビューの中でこれにアクセスする方法を教えてください。
必要なすべてのデータを含む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
}
私見、あなたはそれを使って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
コントローラーから実際にデータを渡す必要があり、そのデータが内部状態または入力コントローラーパラメーターに依存している場合、または「ビジネスデータ」の他のプロパティがある場合は、モデルパーツを使用する必要があります MVCパターン :
モデルオブジェクトは、アプリケーションのデータドメインのロジックを実装するアプリケーションの一部です。多くの場合、モデルオブジェクトはモデルの状態を取得してデータベースに格納します。たとえば、Productオブジェクトは、データベースから情報を取得して操作し、SQL ServerデータベースのProductsテーブルに更新された情報を書き込むことができます。
詳細を見ることができます ここ またはMicrosoftチュートリアルの ASP.NET MVCでのモデルと検証 の部分をご覧ください。
モデルクラスを追加:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string City { get; set; }
}
モデルオブジェクトをビューに渡します。
public ActionResult Index()
{
var model = GetModel();
return View(model);
}
モデルタイプの定義を介して 厳密に型指定されたビュー を追加します。
@model Person
ビューで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"
プロパティモデルによってビューでモデルを参照できます