ASP.NET MVCでページを編集・追加する

## 前回の記事

Visual StudioでWebアプリケーションを作成する【ASP.NET MVC】

https://qiita.com/shironana/items/ae99eb267cc2b1cce04c

## 本記事のゴール
- 既存のページを編集し、表示する。
- 新規のページを作成し、表示する。

## 既存Webページの編集

1．/View/Home/Index.cshtml をダブルクリックし、ファイルを表示します。

![image1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779418/b1382f7f-12af-cc24-2682-eb5abb06e802.png)

2．ここに表示されている内容が、このWebアプリケーションを起動したときに表示される内容です。

![image2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779418/b4924f07-faac-df06-30a8-c0d4207c0da9.png)

3．以下のように「Welcome」を「こんにちは！」に書き換えると、起動したときに表示される内容も変わっていることが確認できます。

```diff_html
@{
    ViewData["Title"] = "Home Page";
}

<div class="text-center">
-    <h1 class="display-4">Welcome</h1>
+    <h1 class="display-4">こんにちは！</h1>
    <p>Learn about <a href="https://learn.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>
```
![image3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779418/d3493354-5f56-c7c3-3421-f62d18a64218.png)

## cshtml の記法（C#の埋め込み）

拡張子はcshtmlであるため、HTML・CSS・JavaScriptに加えてC#による制御を加えることができます。なお、C#の処理はサーバーサイドで処理されるため、実際にユーザーに表示される際には処理が実行済みの状態で表示されます。

```html
@{
    // 文中にC#の処理を書く場合は@{}で囲みます。
    var count = 4;
}

@* HTMLの要素内に文を埋め込む場合は@を付けます。 *@
@* 文字に接している場合は文を括弧で囲み、@()とします。 *@
<div>現時点でのカウントは@(count)です。</div>

@* 条件分岐 *@
@if (count > 3)
{
    <div>カウントは3より大きいです。</div>
}
else
{
    <div>カウントは3以下です。</div>
}

@* 繰り返し *@
<ol>
    @for (var i = 0; i < count; i++)
    {
        <li>@(i)掛ける@(i)は@(i * i)です。</li>
    }
</ol>
```
![image4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779418/0d1eb4c4-ad48-7042-91f6-d0fd9057ab0b.png)

## 新規Webページの作成

ASP.NET MVCにおいて新しい画面を追加するためには、ControllerとViewを追加する必要があります。
今回は、「/Ramen/Index」でアクセス可能な画面を追加します。

- *Controller*
    - URLを入力された場合の処理を記述する。
- *View*
    - 実際の画面表示を記述する。

### Controllerの追加

1．右側のソリューションエクスプローラーに存在する「Controller」ディレクトリを右クリック
2．「追加」をクリック
3．「コントローラー」をクリックし、「新規スキャフォールディングのアイテムの追加」ダイアログを開く。

![image5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779418/c0a56bf4-400d-87af-92da-48618f0641e8.png)

4．「MVCコントローラー - 空」を選択し、「追加」を押す。

![image6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779418/c3643224-5b5e-dce4-f40d-362ea2e4526e.png)

5．「MVCコントローラー - 空」が選択されていることを確認し、任意の名前を入力して「追加」を押す。

![image7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779418/14b747a2-790d-09c8-583b-db3b34cc3e05.png)

6．「Controller」ディレクトリ配下に新しいファイルが追加され、画面にファイル内容が表示されていることを確認する。

![image8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779418/a106ec68-b558-5b73-47ce-a956538dbfd1.png)

これで、/Ramen/Index にアクセスすると、7行目から `Index()` に記載した処理が実行されるようになりました。デフォルトだと9行目に `return View()` と記載されているため、View（画面）を表示するという処理が実行されます。次項からは画面を作成します。

なお、基本的に名前とURLには対応関係があり、コントローラー名と関数名に依存します。
RamenControllerのIndex()であればURLは「/Ramen/Index」（Indexは省略できるため /Ramen でも可）となります。

![image9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779418/aa6227b8-ccc0-3099-691f-8314896f45cc.png)

### Viewの追加

Controller側で、/Ramen/Index にアクセスがあった場合に View（画面）を表示するという処理を設定したため、これに対応した View を作成する必要があります。

1．右側のソリューションエクスプローラーに存在する「View」ディレクトリを右クリック
2．「追加」をクリック
3．「新しいフォルダー」をクリック

![スクリーンショット 2023-11-27 221750.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779418/1c9593b6-1ce6-5aec-4795-80cbf10b9731.png)

4．「新しいフォルダー」の名前をControllerに付けた名前に変更する。（今回は Ramen に変更）

![スクリーンショット 2023-11-27 222842.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779418/71b85a66-de21-dde7-2ba8-cce9f4389cf7.png)

5．追加されたフォルダを右クリック
6．「追加」をクリック
7．「ビュー」をクリックし、「新規スキャフォールディングのアイテムの追加」ダイアログを開く。

![スクリーンショット 2023-11-27 223424.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779418/c6b77d64-585d-e85d-86a2-a1384be0e773.png)

8．「Razorビュー - 空」を選択し、「追加」を押す。

![スクリーンショット 2023-11-27 224009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779418/c545870f-b5b9-46cd-44d0-a12c2b64bafe.png)

9．「Razorビュー - 空」が選択されていること及び、名前が「Index.cshtml」であることを確認して「追加」を押す。
※Controllerの関数名を変更した場合は対応する名前に変更する。

![スクリーンショット 2023-11-27 224356.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779418/f8e69439-8cc3-402f-b63b-639b976ad382.png)

10．「Ramen」ディレクトリ配下に新しいファイルが追加され、画面にファイル内容が表示されていることを確認する。

![スクリーンショット 2023-11-27 225020.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779418/10054fe6-b0f2-288d-8d89-8b4f4538b0f2.png)

これで、`RamenController` の `Index()` に対応する画面を作成することができました。
アクセスした際に分かりやすいように、中身を少し変更しておきます。

```Views/Ramen/Index.cshtml
@{
    ViewData["Title"] = "ラーメン";
}

<div>各地のラーメンリストを表示する画面です。</div>
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779418/ddecc354-e296-7afb-5791-ba27401c06c4.png)

### 動作を確認する

ここまでで、`RamenController.cs` と `Index.cshtml` の作成が完了しています。
`/Ramen/Index` にアクセスして画面が表示されることを確認しましょう。

![スクリーンショット 2023-11-27 231020.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779418/307dea09-cb37-0287-2899-6081298889a2.png)

## 次回の記事

【ViewModel】ASP.NET MVCでサーバー側と画面側でデータを受け渡す

https://qiita.com/shironana/items/06ec2cb2e17fb064a857