Asp.net-mvc-scaffolding

提供:Dev Guides
移動先:案内検索

ASP.NET MVC-足場

ASP.NET Scaffoldingは、ASP.NET Webアプリケーション用のコード生成フレームワークです。 Visual Studio 2013には、MVCおよびWeb APIプロジェクト用のプリインストールされたコードジェネレーターが含まれています。 データモデルとやり取りするコードをすばやく追加する場合は、プロジェクトに足場を追加します。 足場を使用すると、プロジェクトで標準データ操作を開発する時間を短縮できます。

ご覧のように、Index、Create、Editアクションのビューを作成し、アクションメソッドも更新する必要があります。 しかし、ASP.Net MVCは、scaffoldingを使用してこれらすべてのビューとアクションメソッドを作成する簡単な方法を提供します。

簡単な例を見てみましょう。 モデルクラスEmployeeを含む同じ例を作成しますが、今回はscaffoldingを使用します。

  • ステップ1 *-Visual Studioを開き、[ファイル]→[新規]→[プロジェクト]メニューオプションをクリックします。

新しいプロジェクトダイアログが開きます。

新しいダイアログ

  • ステップ2 *-左ペインから、テンプレート→Visual C#→Webを選択します。
  • ステップ3 *-中央のペインで、ASP.NET Webアプリケーションを選択します。
  • ステップ4 *-[名前]フィールドにプロジェクト名「MVCScaffoldingDemo」を入力し、[OK]をクリックして続行します。 ASP.NETプロジェクトの初期コンテンツを設定するよう求める次のダイアログが表示されます。

MVCScaffoldingDemo

  • ステップ5 *-シンプルにするために、[空]オプションを選択し、[フォルダーとコア参照の追加]セクションの[MVC]チェックボックスをオンにして、[OK]をクリックします。

最小限の定義済みコンテンツで基本的なMVCプロジェクトを作成します。

Visual Studioでプロジェクトを作成すると、ソリューションエクスプローラーウィンドウに多数のファイルとフォルダーが表示されます。

Visual Studioによって作成されたプロジェクト

Entity Frameworkサポートを追加

最初のステップは、Entity Frameworkをインストールすることです。 プロジェクトを右クリックして、NuGetパッケージマネージャー→ソリューションのNuGetパッケージの管理…を選択します

NuGetパッケージマネージャー

「NuGetパッケージマネージャー」が開きます。 検索ボックスでエンティティフレームワークを検索します。

Entity Framework検索ボックス

Entity Frameworkを選択し、「インストール」ボタンをクリックします。 [プレビュー]ダイアログが開きます。

プレビューダイアログを開く

[OK]をクリックして続行します。

続行するには[OKをクリックしてください]

[同意する]ボタンをクリックしてインストールを開始します。

ボタンのインストールに同意します

Entity Frameworkがインストールされると、上のスクリーンショットに示すように、アウトウィンドウにメッセージが表示されます。

モデルを追加

モデルを追加するには、ソリューションエクスプローラーでModelsフォルダーを右クリックし、[追加]→[クラス]を選択します。 [新しいアイテムの追加]ダイアログが表示されます。

アイテムダイアログ

中央のパンで「クラス」を選択し、名前フィールドにEmployee.csと入力します。

次のコードを使用して、いくつかのプロパティをEmployeeクラスに追加します。

using System;

namespace MVCScaffoldingDemo.Models {
   public class Employee{
      public int ID { get; set; }
      public string Name { get; set; }
      public DateTime JoiningDate { get; set; }
      public int Age { get; set; }
   }
}

DBContextを追加

Employee Modelがあります。今度は、Entity Frameworkと通信してデータを取得および保存する別のクラスを追加する必要があります。 以下は、Employee.csファイルの完全なコードです。

using System;
using System.Data.Entity;

namespace MVCScaffoldingDemo.Models{
   public class Employee{
      public int ID { get; set; }
      public string Name { get; set; }
      public DateTime JoiningDate { get; set; }
      public int Age { get; set; }
   }

   public class EmpDBContext : DbContext{
      public DbSet<Employee> Employees { get; set; }
   }
}

ご覧のとおり、「EmpDBContext」は「DbContext」として知られるEFクラスから派生しています。 このクラスには、DbSetという名前のプロパティが1つあります。これは基本的に、クエリおよび保存するエンティティを表します。

ソリューションをビルドしましょう。プロジェクトが正常にビルドされるとメッセージが表示されます。

プロジェクトの正常なビルド

足場アイテムを追加する

足場を追加するには、ソリューションエクスプローラーで[コントローラー]フォルダーを右クリックし、[追加]→[新しい足場アイテム]を選択します。

新しい足場アイテム

[足場の追加]ダイアログが表示されます。

スキャフォールドダイアログの表示

中央のペインでEntity Frameworkを使用して、ビューを持つMVC 5コントローラーを選択し、[コントローラーの追加]ダイアログを表示する[追加]ボタンをクリックします。

Entity Frameworkミドルペイン

モデルクラスドロップダウンからEmployeeを選択し、データコンテキストクラスドロップダウンからEmpDBContextを選択します。 また、コントローラー名がデフォルトで選択されていることもわかります。

[追加]ボタンをクリックして続行すると、スカフォールディングを使用してVisual Studioによって作成されたEmployeesControllerに次のコードが表示されます。

using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web.Mvc;
using MVCScaffoldingDemo.Models;

namespace MVCScaffoldingDemo.Controllers {
   public class EmployeesController : Controller{
      private EmpDBContext db = new EmpDBContext();

     //GET: Employees
      public ActionResult Index(){
         return View(db.Employees.ToList());
      }

     //GET: Employees/Details/5
      public ActionResult Details(int? id){
         if (id == null){
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
         }

         Employee employee = db.Employees.Find(id);

         if (employee == null){
            return HttpNotFound();
         }
         return View(employee);
      }

     //GET: Employees/Create
      public ActionResult Create(){
         return View();
      }

     //POST: Employees/Create
     //To protect from overposting attacks, please enable the specific
      properties you want to bind to, for
     //more details see http://go.microsoft.com/fwlink/?LinkId=317598.
      [HttpPost]
      [ValidateAntiForgeryToken]

      public ActionResult Create([Bind(Include = "ID,Name,JoiningDate,Age")]
      Employee employee){
         if (ModelState.IsValid){
            db.Employees.Add(employee);
            db.SaveChanges();
            return RedirectToAction("Index");
         }
         return View(employee);
      }

     //GET: Employees/Edit/5
      public ActionResult Edit(int? id){
         if (id == null){
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
         }

         Employee employee = db.Employees.Find(id);

         if (employee == null){
            return HttpNotFound();
         }
         return View(employee);
      }

     //POST: Employees/Edit/5
     //To protect from overposting attacks, please enable the specific
      properties you want to bind to, for
     //more details see http://go.microsoft.com/fwlink/?LinkId=317598.
      [HttpPost]
      [ValidateAntiForgeryToken]
      public ActionResult Edit([Bind(Include = "ID,Name,JoiningDate,Age")]Employee employee){
         if (ModelState.IsValid){
            db.Entry(employee).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
         }
         return View(employee);
      }

     //GET: Employees/Delete/5
      public ActionResult Delete(int? id){
         if (id == null){
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
         }

         Employee employee = db.Employees.Find(id);

         if (employee == null){
            return HttpNotFound();
         }
         return View(employee);
      }

     //POST: Employees/Delete/5
      [HttpPost, ActionName("Delete")]
      [ValidateAntiForgeryToken]

      public ActionResult DeleteConfirmed(int id){
         Employee employee = db.Employees.Find(id);
         db.Employees.Remove(employee);
         db.SaveChanges();
         return RedirectToAction("Index");
      }

      protected override void Dispose(bool disposing){
         if (disposing){
            db.Dispose();
         }

         base.Dispose(disposing);
      }
   }
}

アプリケーションを実行し、次のURL http://localhost:59359/employees を指定します。 次の出力が表示されます。

アプリケーションの実行

Visual Studioによって作成されたデータベースにレコードを追加していないため、ビューにデータがないことがわかります。

[新規作成]リンクをクリックして、ブラウザから1つのレコードを追加しましょう。作成ビューが表示されます。

新規作成をクリック

次のフィールドにデータを追加しましょう。

フィールドにデータを追加

[作成]ボタンをクリックすると、インデックスビューが更新されます。

インデックスビューの更新

新しいレコードもデータベースに追加されていることがわかります。

新しいレコードが追加されました

ご覧のとおり、モデルクラスからビューメソッドとアクションメソッドを作成するはるかに簡単な方法である足場を使用して、同じ例を実装しています。