コンテンツにスキップ

ASP.NET Core/Razor Core

出典: フリー教科書『ウィキブックス(Wikibooks)』

Razorの概要

[編集]

Razorとは何か

[編集]

Razorは、Microsoftが開発したテンプレートエンジンおよびマークアップ構文であり、主にASP.NET Coreに統合されています。これは、HTMLとC#コードをシームレスに組み合わせてWebページを構築するための強力なツールです。

Razorの特徴と利点

[編集]

Razorの特徴と利点は次のとおりです:

  • シンプルで直感的な構文 RazorはHTMLとC#を直感的に組み合わせることができるため、開発者が簡単にWebページを構築できます。
  • コードの再利用 Razorでは、C#コードを使ってロジックを直接組み込むことができます。これにより、再利用性が向上し、コンポーネントの設計が容易になります。
  • 強力なビューエンジン RazorはASP.NET Coreの中核的なビューエンジンであり、強力なテンプレート機能を提供します。ビューのレンダリングやデータ表示が効率的に行えます。
  • IDEのサポート Visual StudioやVisual Studio Codeなどの開発環境では、Razorの構文ハイライトやインテリセンスなどの豊富なサポートが利用できます。

Razor CoreとASP.NET Coreの関係

[編集]

ASP.NET Coreは、Webアプリケーションを構築するためのフレームワークであり、Razor Coreはそのビューエンジンの一部として機能します。 ASP.NET Coreプロジェクトでは、Razorを使用してページやビューを動的に生成し、データを表示および操作します。

このように、Razor CoreはASP.NET Coreの中心的な機能の1つであり、ASP.NET Coreアプリケーションの開発において重要な役割を果たしています。

Razor構文の基礎

[編集]

Razor構文の基本書式

[編集]

Razor構文は、WebページのビューにC#コードを埋め込むためのシンプルかつ強力な構文を提供します。基本的に、RazorではHTMLとC#コードをシームレスに組み合わせて使用できます。C#コードは@記号で始まり、HTMLコードと同じ行または別の行で記述できます。

例えば、以下のような構文でC#コードとHTMLを混在させることができます:

<h1>@Model.Title</h1>
<p>The current date is: @DateTime.Now</p>

この構文により、動的なデータを簡単に埋め込んで表示することができ、Webページに動的な内容を容易に組み込むことができます。

C#コードブロックの記述

[編集]

Razorでは、C#コードをブロックとして記述することができます。これには、C#の@{}構文を使用します。ブロック内では、変数の宣言やループ、条件文など、複雑なロジックを記述することができます。

@{
    var greeting = "Hello, Razor!";
    var timeOfDay = DateTime.Now.Hour < 12 ? "Good Morning" : "Good Afternoon";
}
<p>@greeting</p>
<p>@timeOfDay</p>

この例では、@{}内でC#コードを使用して、変数を定義し、条件文によって挨拶の内容を変更しています。@を使って変数や式の結果をHTMLに出力することができます。

式展開とHTMLエンコーディング

[編集]

Razorでは、式展開(@記号を使ってC#式の結果を表示すること)を使って、動的に生成される内容を簡単にWebページに組み込むことができます。ただし、Webページに出力されるデータはデフォルトでHTMLエンコードされます。これにより、クロスサイトスクリプティング(XSS)攻撃を防ぐために、HTML要素や特殊文字(<, >, &, など)が自動的にエスケープされます。

例えば、以下のようにHTML要素を含む文字列を出力しても、ブラウザに表示される際には要素がそのまま表示され、実際にはHTMLとして解釈されません:

<p>@Model.UserInput</p>

@Model.UserInputにユーザーからの入力が含まれていたとしても、その入力内のHTML要素はエスケープされ、安全に表示されます。もしHTMLとして要素を表示したい場合は、@Html.Raw()メソッドを使用してエンコードを解除できます:

<p>@Html.Raw(Model.UserInput)</p>

これにより、ユーザー入力がHTMLとしてレンダリングされるため、注意が必要です。

ビューの作成

[編集]

Razorでのビュー作成は、Webアプリケーションにおけるユーザーインターフェース部分を動的に生成する過程です。ビューは、通常HTML、CSS、そしてC#コードを組み合わせてページを描画します。Razorでは、ビューの構造を分かりやすく、効率的に設計できます。

ビューファイルの構造

[編集]

Razorのビューファイルは、通常.cshtmlという拡張子を持ちます。これらのファイルはHTMLの基本的な構造に加えて、C#コードを埋め込むためのRazor構文を使用します。例えば、ページのタイトルやデータの表示を動的に変更することができます。

@{
    ViewData["Title"] = "My Razor Page";
}

<!DOCTYPE html>
<html>
<head>
    <title>@ViewData["Title"]</title>
</head>
<body>
    <h1>Welcome to the Razor Page</h1>
    <p>The current date is: @DateTime.Now</p>
</body>
</html>

この例では、ViewDataを使用して、ページのタイトルを動的に設定しています。また、現在の日付を表示するために@DateTime.Nowを使用しています。

ビューレイアウトとパーシャルビュー

[編集]

Razorは、再利用可能なビューレイアウト(レイアウトファイル)や部分ビュー(パーシャルビュー)を作成することをサポートしています。レイアウトファイルは、ページ全体に共通のレイアウト(ヘッダー、フッター、ナビゲーションなど)を持たせるために使用され、パーシャルビューはページの一部を再利用可能なコンポーネントとして定義します。

ビューレイアウトの使用例 :
@{
    Layout = "_Layout";
}

<h2>Content of the page</h2>
<p>This content will appear inside the layout.</p>
この例では、_Layoutという共通のレイアウトファイルを指定しています。_Layout.cshtmlファイルにはヘッダーやフッター、共通のナビゲーションが含まれており、各ページはそのレイアウト内にコンテンツを埋め込む形で表示されます。
パーシャルビューの使用例 :
@{ 
    Html.RenderPartial("_Header"); 
}

<div>
    <p>This is the body of the page.</p>
</div>
ここでは、_Header.cshtmlというパーシャルビューを挿入しています。これにより、ヘッダー部分のコードを複数のページで再利用できます。

ビューデータの受け渡し

[編集]

Razorビューは、コントローラーやページモデルからデータを受け取って、動的にコンテンツを生成します。このデータは、ViewDataViewBagModelオブジェクトを通じて渡されます。

ViewDataを使用した例 :
<p>@ViewData["Message"]</p>

コントローラーやページモデルからは、次のようにデータを設定します:

ViewData["Message"] = "Hello, Razor!";
Modelを使用した例 :
@model MyApplication.Models.User

<p>Hello, @Model.Name!</p>
コントローラーでは、ModelとしてUserオブジェクトをビューに渡します。Modelを使用することで、より型安全にデータを扱うことができ、コンパイル時にエラーが検出されやすくなります。

ビジネスロジックの実装

[編集]

コントローラーとビューの連携

[編集]

モデルオブジェクトの利用

[編集]

制御構文とヘルパー関数

[編集]

フォームとバリデーション

[編集]

入力フォームの構築

[編集]

モデルバインディングとバリデーション

[編集]

検証エラーの表示

[編集]

テンプレート

[編集]

再利用可能なビューコンポーネント

[編集]

Editor TemplateとDisplay Template

[編集]

Tag Helperによるカスタムタグ

[編集]

ビューの環境設定

[編集]

Razor設定のカスタマイズ

[編集]

グローバル、ローカルでの設定

[編集]

ビルド時の最適化

[編集]

セキュリティ

[編集]

クロスサイトスクリプティング(XSS)対策

[編集]

リクエストforgery (CSRF) 対策

[編集]

セキュアなHTMLレンダリング

[編集]

テスト

[編集]

Razor Pageのユニットテスト

[編集]

統合テストとスナップショットテスト

[編集]

テストフレームワークの活用

[編集]

デプロイ

[編集]

本番環境へのデプロイ

[編集]

Dockerコンテナ化

[編集]

クラウドデプロイ(Azure、AWS)

[編集]

高度な機能

[編集]

Blazor Serverサイドレンダリング

[編集]

Partial Views and Components

[編集]

Dependency Injectionの活用

[編集]