web-dev-qa-db-ja.com

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をビューに渡す方法を誰かが示すことができることを願っています。そして、私は私のビューの中でこれにアクセスする方法を教えてください。

11
Inkey

必要なすべてのデータを含む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 typeddynamicではなくモデル

@model ViewModel

その後、次の方法でViewModelプロパティを反復処理できます。

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

私見、あなたはそれを使って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
6
Satpal

コントローラーから実際にデータを渡す必要があり、そのデータが内部状態または入力コントローラーパラメーターに依存している場合、または「ビジネスデータ」の他のプロパティがある場合は、モデルパーツを使用する必要があります MVCパターン

モデルオブジェクトは、アプリケーションのデータドメインのロジックを実装するアプリケーションの一部です。多くの場合、モデルオブジェクトはモデルの状態を取得してデータベースに格納します。たとえば、Productオブジェクトは、データベースから情報を取得して操作し、SQL ServerデータベースのProductsテーブルに更新された情報を書き込むことができます。

詳細を見ることができます ここ またはMicrosoftチュートリアルの 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. モデルタイプの定義を介して 厳密に型指定されたビュー を追加します。

    @model Person
    
  4. ビューでModel変数を使用します。

    @Model.City
    
2
Vadim Martynov

代わりにモデルを使用してください

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"

プロパティモデルによってビューでモデルを参照できます

1
vborutenko