質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

1回答

8214閲覧

ASP.NET MVCで新規スキャフォールディングアイテムメニューを見つけたい

cancat

総合スコア313

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2017/04/07 01:01

編集2017/04/07 02:05

こんにちは。
Windows10でASP.NET MVCのアプリケーションを開発しています。
Visual Studio 2017 Communityを使っています。
ASP.NET MVCほぼ初心者です。

###前提・実現したいこと
Modelをつくり、そこからスキャフォールディングでコントローラーとViewを作りたいです。

###試したこと
(1)まったく空の新規ASP.NET MVC(.NET Core)プロジェクトをつくりました。
(2)Modelを作りました。
(3)ソリューションエクスプローラのControllsで右クリックし、追加-新規スキャフォールディングアイテムを選択しました。

###発生している問題・エラーメッセージ
これでうまくいったので、既存のプロジェクトで作業しました。
(1)Modelを作りました。テストとの違いはNameSpaceです。(test->MyProject.WebAPI.Models)
(3)ソリューションエクスプローラのControllsで右クリックし、追加を選びました。

ところが新規スキャフォールディングアイテムメニューがありません。

両方のプロジェクトの違いは、
(1)Testはtarget frameworkが.NETCoreApp1.1、既存のは.NET Framework4.5
(2)Testは出力がコンソールアプリケーション、既存のはクラスライブラリ
(3)プロパティを見るとTestにはWeb, Webのパッケージ化/発行、SQLのパッケージ化/発行のメニュー項目が存在しない

などです。

なにをどうすればスキャフォールディングを実行できるのでしょう?

###該当のソースコード

C#

1using System; 2using System.Collections.Generic; 3using System.ComponentModel.DataAnnotations; 4 5namespace MyProject.WebAPI.Models 6{ 7 public class Tenant 8 { 9 public int TenantId { get; set; } 10 public Guid TenantGUID { get; set; } 11 public string Name { get; set; } 12 } 13 14}

###補足情報(言語/FW/ツール等のバージョンなど)
Microsoft Visual Studio Community 2017
Version 15.0.26228.9 D15RTWSVC
Microsoft .NET Framework
Version 4.6.01586

です。
よろしくお願いします。

###追記
http://blog.shibayan.jp/entry/20160928/1474990457
を参考に、NuGetで、
Microsoft.VisualStudio.Web.CodeGeneration.Tools
Microsoft.VisualStudio.Web.CodeGenerators.Mvc
を追加してみようとしましたが、これはASP.NET Core MVCの場合で、.NET 4.5では追加できませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/04/07 02:26

最終的に作りたいのは、従前の「ASP.NET」+「.NET Framework」ベースのアプリなのか、新しい「ASP.NET Core」+「.NET Core」ベースのアプリなのか、どちらですか?
cancat

2017/04/07 03:27

ASP.NET+.NET Frameworkです。
guest

回答1

0

最終的に作りたいのは「ASP.NET+.NET Frameworkです」とのことですので、質問に書いてあった「ASP.NET MVC(.NET Core)プロジェクト」の話は忘れてレスします。

いろいろやり方があると思いますが、例えば以下のチュートリアルのように既存の DB から Visual Studio のウィザードを使って EDM を生成し、それをベースにすると Visual Studio のスキャフォールディング機能で CRUD 機能を持つ Controller と View を一式自動生成してくれます。

10 行でズバリ!! ASP.NET MVC を構成する各コンポーネントとネーミング ルール (C#)
https://code.msdn.microsoft.com/10-ASPNET-MVC-C-8566eeb5/

具体的には、VS2015 Community の場合ですが、ソリューションエクスプローラーで Controllers フォルダを右クリックして [追加(D)] ⇒ [コントローラー (T)...] をクリックすると、「スキャフォールディングを追加」というダイアログが表示されます。

EDM を作成済みなら、そこで、[MVC5 Controller with views, using Entity Framework] を選択し [追加] をクリックすると「Add Controller」ダイアログが表示されるので、そこで必要な情報を入力してから [Add] ボタンをクリックするだけの操作となります。

その操作で以下のような Controller のコードが自動生成されます。同時に Controller のアクションメソッドに対応した View もすべて自動生成されます。

using System; using System.Collections.Generic; using System.Data; using System.Data.Entity; using System.Linq; using System.Net; using System.Web; using System.Web.Mvc; using AdventureWorksLT; namespace Mvc5App.Controllers { public class AddressesController : Controller { private AdventureWorksLTEntities db = new AdventureWorksLTEntities(); // GET: Addresses public ActionResult Index() { return View(db.Address.ToList()); } // GET: Addresses/Details/5 public ActionResult Details(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Address address = db.Address.Find(id); if (address == null) { return HttpNotFound(); } return View(address); } // GET: Addresses/Create public ActionResult Create() { return View(); } // POST: Addresses/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 = "AddressID,AddressLine1,AddressLine2,City,StateProvince,CountryRegion,PostalCode,rowguid,ModifiedDate")] Address address) { if (ModelState.IsValid) { db.Address.Add(address); db.SaveChanges(); return RedirectToAction("Index"); } return View(address); } // GET: Addresses/Edit/5 public ActionResult Edit(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Address address = db.Address.Find(id); if (address == null) { return HttpNotFound(); } return View(address); } // POST: Addresses/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 = "AddressID,AddressLine1,AddressLine2,City,StateProvince,CountryRegion,PostalCode,rowguid,ModifiedDate")] Address address) { if (ModelState.IsValid) { db.Entry(address).State = EntityState.Modified; db.SaveChanges(); return RedirectToAction("Index"); } return View(address); } // GET: Addresses/Delete/5 public ActionResult Delete(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Address address = db.Address.Find(id); if (address == null) { return HttpNotFound(); } return View(address); } // POST: Addresses/Delete/5 [HttpPost, ActionName("Delete")] [ValidateAntiForgeryToken] public ActionResult DeleteConfirmed(int id) { Address address = db.Address.Find(id); db.Address.Remove(address); db.SaveChanges(); return RedirectToAction("Index"); } protected override void Dispose(bool disposing) { if (disposing) { db.Dispose(); } base.Dispose(disposing); } } }

クラス定義しかない場合は Controller と View 一式全て自動生成は無理だったと記憶していますが、それでも上の記事にあるように、スキャフォールディング機能を利用して、まず Contoller を生成してから View を生成するという手順では可能なはずです。

VS2017 はで少々違うかもしれませんが(使ってないので分かりません)、基本的なところは同じだと思います。

********* 2017/4/19 15:15 追記 *********

2017/04/19 15:10 の私のコメントで「回答欄に画像の URL を書いておきますので見てください」と書きましたが、それを以下に追記しておきます。

VS2015 Community の場合です。

(1) ソリューションエクスプローラーで Controllers フォルダを右クリックして [追加(D)]をクリックすると以下の画像のようになる:

http://surferonwww.info/BlogEngine/image.axd?picture=2017%2f4%2fAdventureWorksLT0.jpg

(2) 上の画像で [コントローラー (T)...] をクリックすると「スキャフォールディングを追加」というダイアログが表示される:

http://surferonwww.info/BlogEngine/image.axd?picture=2017%2f4%2fAdventureWorksLT1.jpg

(3) EDM を作成済みなら、上の画像で [MVC5 Controller with views, using Entity Framework] を選択し [追加] をクリックすると「Add Controller」ダイアログが表示される:

http://surferonwww.info/BlogEngine/image.axd?picture=2017%2f4%2fAdventureWorksLT2.jpg

上の画像のように必要な情報を入力してから [Add] ボタンをクリックする。

その操作で Controller のコードが自動生成されます(上にアップしたコードを参照)。同時に Controller のアクションメソッドに対応した View もすべて自動生成されます。

投稿2017/04/07 05:42

編集2017/04/19 06:16
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cancat

2017/04/19 05:25

すみません。 具体的には、VS2015 Community の場合ですが、ソリューションエクスプローラーで Controllers フォルダを右クリックして [追加(D)] ⇒ [コントローラー (T)...] をクリックすると、「スキャフォールディングを追加」というダイアログが表示されます。 とのことですが、このメニューもダイアログもでないので困っています。
退会済みユーザー

退会済みユーザー

2017/04/19 06:10

なるべく間を開けずに返事をいただけると嬉しいのですが。 質問者さんの環境で何故表示されないのか分かりませんが、自分の環境では間違いなく表示されます。回答欄に画像の URL を書いておきますので見てください。(何故かこの記事に直接画像を貼れないので、画像は自分のサーバーにアップしてそこへのリンクを張っておきます)
cancat

2017/04/19 08:30

回答遅れてすみません。 コメントありがとうございます。 残念ながらそのメニューはない、という状況で、解決できませんでした。 しかたないので、手で作ります。
退会済みユーザー

退会済みユーザー

2017/04/19 09:34 編集

VS2015 ⇒ VS2017 でスキャフォールディングの機能・メニューがなくなったということは考えにくいのですが・・・ どうしても VS2017 にメニューが見つからなければ、自力でコードを書くより、VS2015 を新たにインストールして使った方が早いと思いますよ。自力で書く工数もさることながら、自力で書いて間違えると(普通間違いはあるはず)その修正などに必要な工数もバカにならないはずですし。
cancat

2017/04/19 10:41

はい。質問に書いた通り、新規に.netcoreを選択すると、メニューが出ます。 しかし、既存のプロジェクトではでないのです。 なので、なにかが違っていることはわかるのです。 それを特定できないのです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問