ASP.NET Web ページ 2 のトップ機能

作成者: Microsoft

この記事では、Microsoft WebMatrix 2 RC に含まれる軽量の Web プログラミング フレームワークである ASP.NET Web ページ 2 RC の新機能の概要について説明します。

含まれているもの:

注意

このトピックでは、WebMatrix を使用して ASP.NET Web ページ 2 コードを操作していることを前提としています。 ただし、Web ページ 1 と同様に、Visual Studio を使用して Web ページ 2 Web サイトを作成することもできます。これにより、IntelliSense 機能とデバッグが強化されます。 Visual Studio で Web ページを操作するには、まず Visual Studio 2010 SP1、Visual Web Developer Express 2010 SP1、または Visual Studio 11 Beta をインストールする必要があります。 次に、visual Studio で MVC 4 および Web ページ 2 アプリケーション ASP.NET 作成するためのテンプレートとツールを含む、ASP.NET MVC 4 ベータ版をインストールします。

最終更新日: 2012 年 6 月 18 日

WebMatrix のインストール

Web ページをインストールするには、Microsoft Web Platform Installerを使用できます。これは、Web 関連テクノロジのインストールと構成を簡単にする無料のアプリケーションです。 Web Pages 2 ベータ版を含む WebMatrix 2 ベータ版をインストールします。

  1. Web プラットフォーム インストーラーの最新バージョンのインストール ページを参照します。

    https://go.microsoft.com/fwlink/?LinkId=226883

    注意

    WebMatrix 1 が既にインストールされている場合は、このインストールによって WebMatrix 2 Beta に更新されます。 バージョン 1 または 2 を使用して作成された Web サイトは、同じコンピューター上で実行できます。 詳細については、「 Web ページ アプリケーションをサイド バイ サイドで実行する」のセクションを参照してください。

  2. [ 今すぐインストール] を選択します。

    インターネット エクスプローラーを使用する場合は、次の手順に進みます。 Mozilla Firefox や Google Chrome などの別のブラウザーを使用している場合は、 Webmatrix.exe ファイルをコンピューターに保存するように求められます。 ファイルを保存し、それをクリックしてインストーラーを起動します。

  3. インストーラーを実行し、[ インストール ] ボタンを選択します。 これにより、WebMatrix と Web ページがインストールされます。

新機能と強化された機能

RC バージョンの変更 (2012 年 6 月)

2012 年 6 月の RC バージョン リリースでは、2012 年 3 月にリリースされたベータ版の更新からいくつかの変更があります。 これらの変更は次のとおりです。

  • Validation.AddFormErrorメソッドがヘルパーにValidation追加されました。 これは、検証を手動で実行し (たとえば、クエリ文字列で渡された値を検証する)、 メソッドで表示できるエラー メッセージを追加する場合に Html.ValidationSummary 便利です。 詳細については、「ASP.NET Web ページ (Razor) サイトでのユーザー入力の検証」の「ユーザーから直接取得されないデータの検証」セクションを参照してください。
  • バンドルと縮小の機能は、コア ASP.NET Web ページ 2 つのアセンブリから削除されました。 その結果、このドキュメントの Assets 後半に記載されているヘルパーは使用できません。 代わりに、 ASP.NET 最適化 NuGet パッケージをインストールする必要があります。 詳細については、「ASP.NET Web ページ (Razor) サイトでのアセットのバンドルと縮小」を参照してください。
  • ASP.NET Web ページ 2 をサポートするアセンブリが追加されました。 この変更の唯一の顕著な効果は、サイトを作成するか、ホスティング プロバイダーにサイトを展開した後に、サイトの bin フォルダーにさらに多くのアセンブリが表示される可能性があるということです。

ベータ版の変更 (2012 年 2 月)

2012 年 2 月にリリースされたベータ版では、2011 年 12 月にリリースされたベータ版からの変更はわずかです。 これらの変更は次のとおりです。

  • Razor で条件付き属性がサポートされるようになりました。 HTML 要素で、サーバー コードで または nullに解決される値に属性をfalse設定した場合、ASP.NET 属性はまったくレンダリングされません。 たとえば、チェック ボックスに対して次のマークアップがあるとします。

    <input type="checkbox"
    name="check1"
    value="check1"
    checked="@checked1" />
    

    checked1値が または にfalsenull解決される場合、checked属性はレンダリングされません。 これは重大な変更です。

  • メソッドの Validation.GetHtml 名前が に Validation.For変更されました。 これは破壊的変更です。 Validation.GetHtml はベータリリースでは機能しません。

  • マークアップに 演算子を ~ 含め、関数を使用せずにサイト ルートを Href 参照できるようになりました。 (つまり、Razor パーサーは、 への明示的なメソッド呼び出Hrefしを~必要とせずに演算子を見つけて解決できるようになりました)。メソッドはHref引き続き機能するため、これは破壊的変更ではありません。

    たとえば、以前に次のようなマークアップがある場合は、次のようになります。

    <a href="@Href("~/Default.cshtml")">Home</a>

    次のようなマークアップを使用できるようになりました。

    <a href="~/Default.cshtml">Home</a>

  • Scripts資産 (リソース) 管理のヘルパーがヘルパーにAssets置き換えられました。ヘルパーには、次のようなメソッドが若干異なります。

    • の場合は Scripts.Add、 を使用します。 Assets.AddScript

    • の場合は Scripts.GetScriptTags、 を使用します。 Assets.GetScripts

      これは破壊的変更です。 Scripts クラスはベータリリースでは使用できません。 このドキュメントの資産管理を使用するコード例は、この変更によって更新されています。

新規および更新されたサイト テンプレートの使用

スタート サイト テンプレートは、既定で Web ページ 2 で実行されるように更新されています。 また、次の新機能も含まれています。

  • モバイルに対応したページ レンダリング。 スタート サイトでは、CSS スタイルとセレクターを@media使用して、モバイル デバイス画面を含む小さな画面でのページのレンダリングを改善します。
  • メンバーシップと認証オプションが改善されました。 Twitter、Facebook、Windows Live などの他のソーシャル ネットワーキング サイトのアカウントを使用して、ユーザーがサイトにログインできるようにすることができます。 詳細については、「 OAuth と OpenID を使用した Facebook およびその他のサイトからのログインの有効化 」セクションを参照してください。
  • HTML5 要素。

新しい 個人用サイト テンプレートを使用すると、個人用ブログ、写真ページ、Twitter ページを含む Web サイトを作成できます。 次の手順を実行して、 個人用サイト テンプレートに基づいてサイトをカスタマイズできます。

  • レイアウト ファイル (_SiteLayout.cshtml) とスタイル ファイル (Site.css) を編集して、サイトの外観を変更します。
  • サイトに機能を追加する NuGet パッケージをインストールします。 ASP.NET Web ヘルパー ライブラリなど、パッケージをインストールする方法については、ヘルパーのインストールに関 するチュートリアルを参照してください。

個人用サイト テンプレートにアクセスするには、WebMatrix クイック スタート画面で [テンプレート] を選択します。

topseven-personalsite-1

[テンプレート] ダイアログ ボックス 、[ 個人用サイト ] テンプレートを選択します。

topseven-personalsite-2

個人用サイト テンプレートのランディング ページを使用すると、リンクに従ってブログ、Twitter ページ、写真ページを設定できます。

topseven-personalsite-3

ユーザー入力の検証

Web ページ 1 では、送信されたフォームに対するユーザー入力を検証するために、 クラスを System.Web.WebPages.Html.ModelState 使用します。 (これは、「 データの操作」というタイトルの Web ページ 1 チュートリアルのいくつかのコード サンプルに示されています)。この方法は引き続き Web ページ 2 で使用できます。 ただし、Web ページ 2 には、ユーザー入力を検証するための改善されたツールも用意されています。

  • System.Web.WebPages.Validatorを含むSystem.Web.WebPages.ValidationHelper新しい検証クラスを使用すると、数行のコードで強力な検証タスクを実行できます。
  • 必要に応じて、クライアント側の検証。検証エラーをチェックするためにサーバーへのラウンド トリップを要求する代わりに、ユーザーに即時フィードバックを提供します。 (セキュリティ上の理由から、事前にクライアントでチェックが実行されている場合でも、サーバーで検証が実行されます)。

新しい検証機能を使用するには、次の操作を行います。

ページのコードで、ヘルパー Validation.RequireFieldValidation.RequireFields の メソッドを使用して検証する要素を登録します。(必要な複数のValidation要素を登録するには)、または Validation.AddAddメソッドを使用すると、データ型チェック、異なるフィールドのエントリの比較、文字列長チェック、パターン (正規表現を使用) など、他の種類の検証チェックを指定できます。 次に例をいくつか示します。

Validation.RequireField("text1");
Validation.RequireField("text1", "The text1 field is required");
Validation.RequireFields("text1", "text2", "text3");

Validation.Add("text1", Validation.StringLength(5));
Validation.Add("textDate", Validation.DateTime("Enter a date"));
Validation.Add("textCount", Validation.Integer("Enter a number"));
Validation.Add("textCount",
Validation.Range(1, 10, "Enter a value between 1 and 10"));

フィールド固有のエラーを表示するには、検証対象の各要素のマークアップで を呼び出 Html.ValidationMessage します。

<input type="text" name="course"
value="@Request["course"]" />
@Html.ValidationMessage("course")

ページ内のすべてのエラーの概要 (<ul> 一覧) をマークアップに表示するには: Html.ValidationSummary

@Html.ValidationSummary()

これらの手順は、サーバー側の検証を実装するのに十分です。 クライアント側の検証を追加する場合は、さらに次の操作を行います。

Web ページの セクション内に <head> 、次のスクリプト ファイル参照を追加します。 最初の 2 つのスクリプト参照は、コンテンツ配信ネットワーク (CDN) サーバー上のリモート ファイルを指しています。 3 番目の参照は、ローカル スクリプト ファイルを指しています。 CDN が使用できない場合は、運用アプリでフォールバックを実装する必要があります。 フォールバックをテストします。

<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.6.2.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.8.1/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>

jquery.validate.unobtrusive.min.js ライブラリのローカル コピーを取得する最も簡単な方法は、いずれかのサイト テンプレート (スターター サイトなど) に基づいて新しい Web ページ サイトを作成することです。 テンプレートによって作成されたサイトには 、スクリプト フォルダーjquery.validate.unobtrusive.js ファイルが含まれており、そこからサイトにコピーできます。

Web サイトで _SiteLayout ページを使用してページ レイアウトを制御する場合は、そのページにこれらのスクリプト参照を含め、すべてのコンテンツ ページで検証を行うことができます。 特定のページでのみ検証を実行する場合は、アセット マネージャーを使用して、それらのページにのみスクリプトを登録できます。 これを行うには、検証するページで を呼び出 Assets.AddScript(path) し、各スクリプト ファイルを参照します。 次に、登録された<script>タグをAssets.GetScriptsレンダリングするために、_SiteLayout ページに への呼び出しを追加します。 詳細については、「 Assets Manager へのスクリプトの登録」セクションを参照してください。

個々の要素のマークアップで、 メソッドを Validation.For 呼び出します。 このメソッドは、クライアント側の検証を提供するために jQuery がフックできる属性を出力します。 次に例を示します。

<input type="text" name="course"
value="@Request["course"]"
@Validation.For("course")
/>
@Html.ValidationMessage("course")

次の例は、フォームのユーザー入力を検証するページを示しています。 この検証コードを実行してテストするには、次の操作を行います。

  1. スタート サイト テンプレートなどの Scripts フォルダーを含む WebMatrix 2 サイト テンプレートのいずれかを使用して、新しい Web サイト を作成します。
  2. 新しいサイトで、新しい .cshtml ページを作成し、ページの内容を次のコードに置き換えます。
  3. ブラウザーでページを実行します。 有効な値と無効な値を入力して、検証に対する影響を確認します。 たとえば、必須フィールドを空白のままにするか、[ クレジット ] フィールドに文字を入力します。
@{
// Specify what fields users must fill in.
Validation.RequireFields("course", "professorname", "credits");
// Add validation criteria.  Here, require that input to Credits is an integer.
Validation.Add("credits", Validator.Integer());

if (IsPost)  {
// Wrap the postback code with a validation check.
if (Validation.IsValid()) {
    var course = Request["course"];
    var professorName = Request["professorname"];
    var credits = Request["credits"];
    // Display valid input values.
    <text>
        You entered: <br />
        Class: @course <br />
        Professor: @professorName <br />
        Credits: @credits <br />
    </text>
}
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Testing Validation in ASP.NET Web Pages version 2</title>
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.6.2.js"></script>
<script  src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.8.1/jquery.validate.min.js"></script>
<script src="@Href("~/Scripts/jquery.validate.unobtrusive.min.js")"></script>
</head>
<body>
<form method="post" action="">
<!-- Display a summary message about any validation issues. -->
@Html.ValidationSummary()
<fieldset>
  <legend>Add Class</legend>
<div>
  <label for="Course">Class:</label>
  <!-- Validation.For("course") adds validation attributes to the input element. -->
  <input type="text" name="Course" value="@Request["course"]"  @Validation.For("course") />

  <!-- Display a field-specific message about validation issues. -->
  @Html.ValidationMessage("course")
</div>

<div>
  <label for="ProfessorName">Professor:</label>
  <input type="text" name="ProfessorName" value="@Request["professorname"]"
      @Validation.For("professorname") />
  @Html.ValidationMessage("professorname")
</div>

<div>
  <label for="Credits">Credits:</label>
  <input type="text" name="Credits" value="@Request["credits"]" @Validation.For("credits") />
  @Html.ValidationMessage("credits")
</div>

<div>
  <label>&nbsp;</label>
  <input type="submit" value="Submit" class="submit" />
</div>
  </fieldset>
</form>
</body>
</html>

ユーザーが有効な入力を送信するページを次に示します。

topSeven-valid-1

ユーザーが必須フィールドを空のままにして送信するページを次に示します。

topSeven-valid-2

ユーザーが [クレジット ] フィールドに整数以外の値を指定して送信した場合のページを次に示します。

topSeven-valid-3

詳しくは、次のブログ記事を参照してください。

Assets Manager を使用したスクリプトの登録

assets Manager は、サーバー コードでクライアント スクリプトを登録およびレンダリングするために使用できる新機能です。 この機能は、実行時に 1 つのページに結合された複数のファイル (レイアウト ページ、コンテンツ ページ、ヘルパーなど) のコードを操作する場合に役立ちます。 アセット マネージャーはソース ファイルを調整して、スクリプト ファイルが呼び出されるコード ファイルや呼び出される回数に関係なく、レンダリングされたページでスクリプト ファイルが正しく効率的に参照されるようにします。 また、アセット マネージャーはタグを適切な場所にレンダリング <script> して、ページを迅速に読み込み (レンダリング中にスクリプトをダウンロードせずに) できるようにし、レンダリングが完了する前にスクリプトが呼び出された場合に発生する可能性のあるエラーを回避します。

たとえば、JavaScript ファイルを呼び出すカスタム ヘルパーを作成し、コンテンツ ページ コードの 3 つの異なる場所でこのヘルパーを呼び出すとします。 アセット マネージャーを使用してスクリプト呼び出しをヘルパーに登録しない場合は、すべて同じスクリプト ファイルを指す 3 つの異なる <script> タグがレンダリングされたページに表示されます。 さらに、レンダリングされたページにタグが <script> 挿入される場所によっては、スクリプトがページを完全に読み込む前に特定のページ要素にアクセスしようとするとエラーが発生する可能性があります。 アセット マネージャーを使用してスクリプトを登録する場合は、これらの問題を回避できます。

アセット マネージャーにスクリプトを登録するには、次の操作を行います。

  • スクリプトを参照する必要があるコードで、 メソッドを Assets.AddScript 呼び出します。

  • _SiteLayout ページで、 メソッドをAssets.GetScripts呼び出してタグをレンダリングします<script>

    注意

    Assets.GetScripts呼び出しを、_SiteLayout ページの要素の最後の項目<body>として配置します。 これにより、ページの読み込みが速くなり、スクリプト エラーを回避するのに役立ちます。

次の例は、assets Manager のしくみを示しています。 コードには、次の項目が含まれています。

  • という名前 MakeNoteのカスタム ヘルパー。 このヘルパーは、枠で囲まれた要素を折り返 div し、"Note:" を追加することで、ボックス内に文字列をレンダリングします。 ヘルパーは、実行時の動作をメモに追加する JavaScript ファイルも呼び出します。 ヘルパーは、タグを使用してスクリプトを <script> 参照するのではなく、 を呼び出 Assets.AddScript してスクリプトを登録します。
  • JavaScript ファイル。 これはヘルパーによって呼び出されるファイルであり、イベント中にノート アイテムのフォント サイズを mouseover 一時的に大きくします。
  • コンテンツ ページは、 _SiteLayout ページを参照し、本文にコンテンツをレンダリングし、ヘルパーを MakeNote 呼び出します。
  • _SiteLayout ページ。 このページには、共通のヘッダーとページ レイアウト構造が用意されています。 また、 への Assets.GetScripts呼び出しも含まれています。これは、アセット マネージャーがページ内でスクリプト呼び出しをレンダリングする方法です。

サンプルを実行するには

  1. 空の Web ページ 2 Web サイトを作成します。 これには WebMatrix の空のサイト テンプレートを使用できます。
  2. サイトに Scripts という名前のフォルダーを作成します。
  3. Scripts フォルダーで、Test.jsという名前ファイルを作成し、Test.jsの内容を例からコピーして、ファイルを保存します。
  4. サイトに App_Code という名前のフォルダーを作成します。
  5. App_Code フォルダーに Helpers.cshtml という名前のファイルを作成し、コード例をそこにコピーして、ルート フォルダーの App_Code という名前のフォルダーに保存します。
  6. サイトのルート フォルダーで、 _SiteLayout.cshtml という名前のファイルを作成し、その例をコピーしてファイルを保存します。
  7. サイト ルートで ContentPage.cshtml という名前のファイルを作成し、コード例を追加して保存します。
  8. ブラウザーで ContentPage を実行します。 ヘルパーに MakeNote 渡した文字列は、ボックス化されたメモとしてレンダリングされます。
  9. ノートの上にマウス ポインターを渡します。 スクリプトは、ノートのフォント サイズを一時的に大きくします。
  10. レンダリングされたページのソースを表示します。 の呼び出しAssets.GetScriptsを行った場所により、Test.jsを呼び出すレンダリングされた<script>タグは、ページ本文の最後の項目です。

Test.js

function UpdateNoteStyle(id) {
var theNote = document.getElementById(id);
theNote.style.fontSize = "150%";
}
function ReturnNoteStyle(id) {
var theNote = document.getElementById(id);
theNote.style.fontSize = "inherit";
}

Helpers.cshtml

@helper MakeNote(string content, string noteid) {
Assets.AddScript("~/Scripts/Test.js");

<div id="@noteid" style="border: 1px solid black; width: 90%; padding: 5px; margin-left: 15px;"
 onmouseover="UpdateNoteStyle('@noteid')" onmouseout="ReturnNoteStyle('@noteid')">
  <p>
  <strong>Note</strong>&nbsp;&nbsp; @content
   </p>
</div>
}

_SiteLayout.cshtml

<!DOCTYPE html>

<html lang="en">
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<header>
    <div class="content-wrapper">
        <h1>Contoso Ltd.</h1>
    </div>
</header>
<div id="body">
    <section class="content-wrapper main-content clear-fix">
        @RenderBody()
    </section>
</div>
@Assets.GetScripts()
</body>
</html>

ContentPage.cshtml

@{
Layout = "~/_SiteLayout.cshtml";
}
<p>
Nullam scelerisque facilisis placerat. Fusce a augue
erat, malesuada euismod dui.
</p>
@Helpers.MakeNote("Latin is fun to translate.", "note1")

次のスクリーンショットは、ノートの上にマウス ポインターを置くと、ブラウザーの ContentPage.cshtml を示しています。

topSeven-resmgr-1

OAuth と OpenID を使用して Facebook やその他のサイトからのログインを有効にする

Web ページ 2 には、メンバーシップと認証のための拡張オプションが用意されています。 メインの機能強化は、新しい OAuth プロバイダーと OpenID プロバイダーがあることです。 これらのプロバイダーを使用すると、ユーザーが Facebook、Twitter、Windows Live、Google、Yahoo の既存の資格情報を使用してサイトにログインできるようになります。 たとえば、Facebook アカウントを使用してログインする場合、ユーザーは Facebook アイコンを選択するだけで、ユーザー情報を入力する Facebook ログイン ページにリダイレクトされます。 その後、Facebook ログインをサイト上の自分のアカウントに関連付けることができます。 Web ページ メンバーシップ機能の関連する機能強化は、ユーザーが複数のログイン (ソーシャル ネットワーキング サイトからのログインを含む) を Web サイト上の 1 つのアカウントに関連付けることができる点です。

この画像は 、スタート サイト テンプレートの [ログイン] ページを示しています。このページでは、ユーザーは Facebook、Twitter、または Windows Live アイコンを選択して、外部アカウントでのログインを有効にすることができます。

topSeven-oauth-1

わずか数行のコードを使用して、OAuth と OpenID メンバーシップを有効にすることができます。 OAuth プロバイダーと OpenID プロバイダーを操作するために使用するメソッドとプロパティは、 クラスにあります WebMatrix.Security.OAuthWebSecurity

ただし、コードを使用して他のサイトからのログインを有効にする代わりに、新しいプロバイダーの使用を開始するには、WebMatrix 2 Beta に含まれる新しい スターター サイト テンプレートを使用することをお勧めします。 スターター サイト テンプレートには、完全なメンバーシップ インフラストラクチャが含まれており、ログイン ページ、メンバーシップ データベース、およびユーザーがローカル資格情報または別のサイトの資格情報を使用してサイトにログインするために必要なすべてのコードが含まれています。

OAuth プロバイダーと OpenID プロバイダーを使用してログインを有効にする方法

このセクションでは、ユーザーが外部サイト (Facebook、Twitter、Windows Live、Google、または Yahoo) から スターター サイト テンプレートに基づくサイトにログインできるようにする方法の例を示します。 スターター サイトを作成したら、これを行います (詳細は次のとおりです)。

  • OAuth プロバイダー (Facebook、Twitter、Windows Live) を使用するサイトの場合は、外部サイトにアプリケーションを作成します。 これにより、これらのサイトのログイン機能を呼び出すために必要なアプリケーション キーが提供されます。 OpenID プロバイダー (Google、Yahoo) を使用するサイトの場合、アプリケーションを作成する必要はありません。 これらのサイトすべてについて、ログインして開発者アプリケーションを作成するには、アカウントが必要です。

    注意

    Windows Live アプリケーションは、動作中の Web サイトのライブ URL のみを受け入れるため、ログインのテストにローカル Web サイトの URL を使用することはできません。

  • Web サイト内のいくつかのファイルを編集して、適切な認証プロバイダーを指定し、使用するサイトにログインを送信します。

Google と Yahoo ログインを有効にするには:

  1. Web サイトで 、_AppStart.cshtml ページを編集し、 メソッドの呼び出しの後に Razor コード ブロックに次の 2 行のコードを WebSecurity.InitializeDatabaseConnection 追加します。 このコードにより、Google と Yahoo OpenID の両方のプロバイダーが有効になります。

    OAuthWebSecurity.RegisterOpenIDClient(BuiltInOpenIDClient.Google);
    OAuthWebSecurity.RegisterOpenIDClient(BuiltInOpenIDClient.Yahoo);
    
  2. ~/Account/Login.cshtml ページで、ページの末尾付近にある次<fieldset>のマークアップ ブロックからコメントを削除します。 コードのコメントを解除するには、前の文字を @* 削除し、 ブロックの後に <fieldset> 続きます。 結果のコード ブロックは次のようになります。

    <fieldset>
    <legend>Log in using another service</legend>
    <input type="submit" name="provider" id="facebook" value="Facebook" title="Log in using your Facebook account." />
    <input type="submit" name="provider" id="twitter" value="Twitter" title="Log in using your Twitter account." />
    <input type="submit" name="provider" id="windowsLive" value="WindowsLive" title="Log in using your Windows Live account." />
    </fieldset>
    
  3. <input> Google または Yahoo プロバイダーの要素を <fieldset>~/Account/Login.cshtml ページのグループに追加します。 Google と Yahoo の両方の要素を含む<input>更新された<fieldset>グループは、次の例のようになります。

    <fieldset>
    <legend>Log in using another service</legend>
    <input type="submit" name="provider" id="facebook" value="Facebook" title="Log in using your Facebook account." />
    <input type="submit" name="provider" id="twitter" value="Twitter" title="Log in using your Twitter account." />
    <input type="submit" name="provider" id="windowsLive" value="WindowsLive" title="Log in using your Windows Live account." />
    <input type="submit" name="provider" id="yahoo" value="Yahoo" title="Log in using your Yahoo account." />
    <input type="submit" name="provider" id="google" value="Google" title="Log in using your Google account." />
    </fieldset>
    
  4. ~/Account/AssociateServiceAccount.cshtml ページで、Google または Yahoo の要素を<fieldset>ファイルの末尾付近のグループに追加<input>します。 ~/Account/Login.cshtml ページのセクションに<fieldset>追加したのと同じ<input>要素をコピーできます。

    スターター サイト テンプレートの ~/Account/AssociateServiceAccount.cshtml ページは、ユーザーが他のサイトからの複数のログインを Web サイト上の 1 つのアカウントに関連付けることができるページを作成する場合に使用できます。

これで、Google と Yahoo のログインをテストできます。

  1. サイトの default.cshtml ページを実行し、[ ログイン ] ボタンを選択します。

  2. [ ログイン ] ページの [ 別のサービスを使用してログイン する] セクションで、 Google または Yahoo の送信ボタンを選択します。 この例では、Google ログインを使用します。

    Web ページは、要求を Google ログイン ページにリダイレクトします。

    Google ログイン ページにリダイレクトする Web ページを示すスクリーンショット。

  3. 既存の Google アカウントの資格情報を入力します。

  4. Localhost にアカウントからの情報の使用を許可するかどうかを確認するメッセージが表示されたら、[ 許可] をクリックします。

    このコードでは、Google トークンを使用してユーザーを認証し、Web サイトのこのページに戻ります。 このページでは、ユーザーが Google ログインを Web サイト上の既存のアカウントに関連付けたり、サイトに新しいアカウントを登録して外部ログインを関連付けたりすることができます。

    登録ページを示すスクリーンショット。

  5. [ 関連付け ] ボタンを選択します。 ブラウザーがアプリケーションのホーム ページに戻ります。

    アプリケーションのホーム ページを示すスクリーンショット。

    アプリケーションのホーム ページの別のバージョンを示すスクリーンショット。

Facebook ログインを有効にするには:

  1. Facebook 開発者向けサイトに移動します (まだログインしていない場合はログインします)。

  2. [ 新しいアプリの作成 ] ボタンを選択し、プロンプトに従って名前を付けて新しいアプリケーションを作成します。

  3. [アプリと Facebook の統合方法を選択する] セクションで、[ Web サイト ] セクションを選択します。

  4. [ サイトの URL] フィールドにサイトの URL を入力します (例: http://www.example.com)。 [ドメイン] フィールドは省略可能です。これを使用して、ドメイン全体 (example.com など) の認証を提供できます。

    注意

    (番号がローカル ポート番号である) などの http://localhost:12345 URL を使用してローカル コンピューター上のサイトを実行している場合は、サイトをテストするためにこの値 を [サイト URL] フィールドに追加できます。 ただし、ローカル サイトのポート番号が変更されるたびに、アプリケーションの [サイト URL] フィールドを更新する必要があります。

  5. [ 変更の保存] ボタンを選択します。

  6. [ アプリ ] タブをもう一度選択し、アプリケーションのスタート ページを表示します。

  7. アプリケーションの [アプリ ID] と [ アプリ シークレット] の値をコピーし、一時テキスト ファイルに貼り付けます。 これらの値は、Web サイト コードで Facebook プロバイダーに渡します。

  8. Facebook 開発者向けサイトを終了します。

次に、ユーザーが自分の Facebook アカウントを使用してサイトにログインできるように、Web サイト内の 2 つのページに変更を加えます。

  1. Web サイトで 、_AppStart.cshtml ページを 編集し、Facebook OAuth プロバイダーのコードのコメントを解除します。 コメントされていないコード ブロックは次のようになります。

    OAuthWebSecurity.RegisterOAuthClient(
    BuiltInOAuthClient.Facebook,
    consumerKey: "",   // for Facebook, consumerKey is called AppID in the SDK
    consumerSecret: "");
    
  2. Facebook アプリケーションから アプリ ID の値をパラメーターの consumerKey 値 (引用符内) としてコピーします。

  3. Facebook アプリケーションからパラメーター値として アプリ シークレット の値を consumerSecret コピーします。

  4. ファイルを保存して閉じます。

  5. ~/Account/Login.cshtml ページを編集し、ページの末尾付近にあるブロックから<fieldset>コメントを削除します。 コードのコメントを解除するには、前の文字を @* 削除し、 ブロックの後に <fieldset> 続きます。 コメントが削除されたコード ブロックは、次のようになります。

    <fieldset>
    <legend>Log in using another service</legend>
    <input type="submit" name="provider" id="facebook" value="Facebook" title="Log in using your Facebook account." />
    <input type="submit" name="provider" id="twitter" value="Twitter" title="Log in using your Twitter account." />
    <input type="submit" name="provider" id="windowsLive" value="WindowsLive" title="Log in using your Windows Live account." />
    </fieldset>
    
  6. ファイルを保存して閉じます。

Facebook ログインをテストできるようになりました。

  1. サイトの default.cshtml ページを 実行し、[ ログイン ] ボタンを選択します。

  2. [ ログイン ] ページの [ 別のサービスを使用してログインする ] セクションで、 Facebook アイコンを選択します。

    Web ページは、Facebook ログイン ページに要求をリダイレクトします。

    登録のページを示すスクリーンショット。

  3. Facebook アカウントにログインします。

    このコードでは、Facebook トークンを使用してユーザーを認証し、Facebook ログインをサイトのログインに関連付けることができるページに戻ります。 ユーザー名またはメール アドレスがフォームのEmail フィールドに入力されます。

    登録ページのユーザー名または電子メール フィールドを示すスクリーンショット。

  4. [ 関連付け ] ボタンを選択します。

    ブラウザーがホーム ページに戻り、ログインしています。

    ホーム ページに戻るブラウザーを示すスクリーンショット。

Twitter ログインを有効にするには:

  1. Twitter 開発者向けサイトを参照します。

  2. [ アプリの作成 ] リンクを選択し、サイトにログインします。

  3. [ アプリケーションの作成 ] フォームで、[ 名前 ] フィールドと [ 説明 ] フィールドに入力します。

  4. [ WebSite ] フィールドに、サイトの URL (例: http://www.example.com) を入力します。

    Note

    (のような http://localhost:12345URL を使用して) サイトをローカルでテストしている場合、Twitter は URL を受け入れられない可能性があります。 ただし、ローカル ループバック IP アドレス (例: http://127.0.0.1:12345) を使用できる場合があります。 これにより、アプリケーションをローカルでテストするプロセスが簡略化されます。 ただし、ローカル サイトのポート番号が変更されるたびに、アプリケーションの WebSite フィールドを更新する必要があります。

  5. [ コールバック URL ] フィールドに、Twitter にログインした後にユーザーが戻る Web サイトのページの URL を入力します。 たとえば、スターター サイトのホーム ページ (ログイン状態を認識する) にユーザーを送信するには、[ WebSite ] フィールドに入力したのと同じ URL を入力します。

  6. 条件に同意し、[ Twitter アプリケーションの作成 ] ボタンを選択します。

  7. [ マイ アプリケーション] ランディング ページで、作成したアプリケーションを選択します。

  8. [ 詳細 ] タブで、一番下までスクロールし、[ マイ アクセス トークンの作成 ] ボタンを選択します。

  9. [ 詳細 ] タブで、アプリケーションの コンシューマー キーコンシューマー シークレット の値をコピーし、一時テキスト ファイルに貼り付けます。 これらの値は、Web サイト コードで Twitter プロバイダーに渡します。

  10. Twitter サイトを終了します。

これで、ユーザーが Twitter アカウントを使用してサイトにログインできるように、Web サイト内の 2 つのページに変更を加えます。

  1. Web サイトで 、_AppStart.cshtml ページを 編集し、Twitter OAuth プロバイダーのコードのコメントを解除します。 コメントされていないコード ブロックは次のようになります。

    OAuthWebSecurity.RegisterOAuthClient(
    BuiltInOAuthClient.Twitter,
    consumerKey: "",
    consumerSecret: "");
    
  2. Twitter アプリケーションから コンシューマー キー の値をパラメーターの consumerKey 値 (引用符内) としてコピーします。

  3. パラメーターの値として Twitter アプリケーションから コンシューマー シークレット の値を consumerSecret コピーします。

  4. ファイルを保存して閉じます。

  5. ~/Account/Login.cshtml ページを編集し、ページの末尾付近にあるブロックから<fieldset>コメントを削除します。 コードのコメントを解除するには、前の文字を @* 削除し、 ブロックの後に <fieldset> 続きます。 コメントが削除されたコード ブロックは、次のようになります。

    <fieldset>
    <legend>Log in using another service</legend>
    <input type="submit" name="provider" id="facebook" value="Facebook" title="Log in using your Facebook account." />
    <input type="submit" name="provider" id="twitter" value="Twitter" title="Log in using your Twitter account." />
    <input type="submit" name="provider" id="windowsLive" value="WindowsLive" title="Log in using your Windows Live account." />
    </fieldset>
    
  6. ファイルを保存して閉じます。

これで、Twitter ログインをテストできます。

  1. サイトの default.cshtml ページを実行し、[ ログイン ] ボタンを選択します。

  2. [ ログイン ] ページの [ 別のサービスを使用してログインする ] セクションで、 Twitter アイコンを選択します。

    Web ページは、作成したアプリケーションの Twitter ログイン ページに要求をリダイレクトします。

    Twitter ログイン ページにリダイレクトする Web ページを示すスクリーンショット。

  3. Twitter アカウントにログインします。

  4. このコードでは、Twitter トークンを使用してユーザーを認証し、ログインを Web サイト アカウントに関連付けることができるページに戻ります。 名前またはメール アドレスがフォームのEmail フィールドに入力されます。

    フォームに入力されている名前またはメール アドレスを示すスクリーンショット。

  5. [ 関連付け ] ボタンを選択します。

    ブラウザーがホーム ページに戻り、ログインしています。

    ブラウザーがホーム ページに戻り、ログインしているユーザーを示すスクリーンショット。

マップ ヘルパーを使用したマップの追加

Web ページ 2 には、Web ページ サイト用のアドインのパッケージである ASP.NET Web ヘルパー ライブラリへの追加が含まれています。 これらの 1 つは、 クラスによって Microsoft.Web.Helpers.Maps 提供されるマッピング コンポーネントです。 クラスを Maps 使用すると、住所または経度と緯度の座標のセットに基づいてマップを生成できます。 クラス Maps を使用すると、Bing、Google、MapQuest、Yahoo などの一般的なマップ エンジンに直接呼び出すことができます。

Web サイトで新しい Maps クラスを使用するには、まず Web ヘルパー ライブラリのバージョン 2 をインストールする必要があります。 これを行うには、ASP.NET Web ヘルパー ライブラリ の現在リリースされているバージョンをインストールし、バージョン 2 をインストールする手順に移動します。

ページにマッピングを追加する手順は、呼び出すマップ エンジンに関係なく同じです。 マッピング ページに JavaScript ファイル参照を追加し、ページにタグをレンダリングする呼び出しを <script> 追加するだけです。 次に、マッピング ページで、使用するマップ エンジンを呼び出します。

次の例では、住所に基づいてマップをレンダリングするページと、経度と緯度の座標に基づいてマップをレンダリングする別のページを作成する方法を示します。 アドレス マッピングの例では Google Maps を使用し、座標マッピングの例では Bing地図 を使用しています。 コード内の次の要素に注意してください。

  • 2 つのマッピング ページの先頭にある の呼び出し Assets.AddScript 。 このメソッドは、スターター サイト テンプレートに含まれており、 クラスに必要なjquery-1.6.2.min.js ファイルへの参照をMaps追加します。
  • レイアウト ファイル内の Assets.GetScripts メソッドの呼び出し。 このメソッドは、 <script> 2 つのマッピング ページにタグをレンダリングします。
  • マッピング ページ内の @Maps.GetGoogleHtml@Maps.GetBingHtml メソッドと メソッドの呼び出し。 アドレスをマップするには、アドレス文字列を渡す必要があります。 座標をマップするには、経度と緯度の座標を渡す必要があります。 Bing地図 エンジンの場合は、キーを渡す必要もあります (Bing地図開発者サイトにサインアップすると無料で入手できます)。 他のマップ エンジンのメソッドも同様の方法で動作します (@Maps.GetYahooHtml@Maps.GetMapQuestHtml)。

マッピング ページを作成するには:

  1. スターター サイト テンプレートに基づいて Web サイトを作成します。

  2. MapAddress.cshtml という名前のファイルをサイトのルートに作成します。 このページでは、渡したアドレスに基づいてマップが生成されます。

  3. 次のコードをファイルにコピーし、既存のコンテンツを上書きします。

    @{
    Layout = "~/_MapLayout.cshtml";
    Assets.AddScript("~/Scripts/jquery-1.6.2.min.js");
    }
    
    <div id="navigation">
    <h3>Map an Address:</h3>
    <form method="post" action="" id="coordinates" style="width: 320px">
    <fieldset>
      <div>
        <label for="address">Address:</label>
        <input style="width: 300px" type="text"  name="address"  value="@Request["address"]"/>
        <input type="submit" value="Map It!" />
       </div>
    </fieldset>
    </form>
    </div>
    <div id="content">
    @if(IsPost) {
    var theAddress = Request["address"];
    @Maps.GetGoogleHtml(theAddress,
        width: "800",
        height: "800")
    }
    </div>
    
  4. _MapLayout.cshtml という名前のファイルをサイトのルートに作成します。 このページは、2 つのマッピング ページのレイアウト ページになります。

  5. 次のコードをファイルにコピーし、既存のコンテンツを上書きします。

    <!DOCTYPE html>
    
    <html lang="en">
    <head>
    <meta charset="utf-8" />
    
    <title></title>
    <style type="text/css">
        #navigation {
            position: absolute;
            top: 1em;
            left: 3em;
            width: 18em;
        }
        #content {
            margin-top: 10em;
            margin-left: 3em;
        }
    </style>
    </head>
    <body>
      @RenderBody()
    
      @*
    Call the Assets helper to render tags for the Maps helper. For
    releases after Web Pages 2 Beta, call Assets.GetScripts().
      *@
      @Assets.GetScripts()
    </body>
    </html>
    
  6. MapCoordinates.cshtml という名前のファイルをサイトのルートに作成します。 このページでは、渡した一連の座標に基づいてマップが生成されます。

  7. 次のコードをファイルにコピーし、既存のコンテンツを上書きします。

    @{
    Layout = "~/_MapLayout.cshtml";
    Assets.AddScript("~/Scripts/jquery-1.6.2.min.js");
    }
    
    <div id="navigation">
    <h3>Map a set of coordinates:</h3>
    <form method="post" action="" id="coordinates">
    <fieldset>
    <div>
        <label for="latitude">Latitude:&nbsp;&nbsp;&nbsp;</label>
        <input type="text"  name="latitude" value="@Request["latitude"]"/>
    </div>
    <div>
        <label for="longitude">Longitude:</label>
        <input type="text" name="longitude" value="@Request["longitude"]"/>
    </div>
    <div>
        <input type="submit" value="Map It!" />
    </div>
    </fieldset>
    </form>
    </div>
    <div id="content">
    @if(IsPost) {
    var theLatitude = Request["latitude"];
    var theLongitude = Request["longitude"];
    @Maps.GetBingHtml("Ag6C5Ci9VUGz9AIhQyJ7YNwGraanqwy5-V3LK1qGDpdEVPV-MUPBryG18ELoC6g6",
        "",
        theLatitude,
        theLongitude,
        width: "800",
        height: "800")
    }
    </div>
    

マッピング ページをテストするには:

  1. ページ MapAddress.cshtml ファイルを実行します。

  2. 住所、都道府県、郵便番号を含む完全な住所文字列を入力し、[ マップ] ボタンを選択します。 このページでは、Google Maps からマップがレンダリングされます。

    topseven-maphelper-1

  3. 特定の場所の緯度と経度の座標のセットを検索します。

  4. MapCoordinates.cshtml ページを実行します。 座標を入力し、[ マップ] ボタンを選択します。 ページは、次のBing地図からマップをレンダリングします。

    topseven-maphelper-2

Web ページ アプリケーションをサイド バイ サイドで実行する

Web ページ 2 では、アプリケーションを並行して実行する機能が追加されています。 これにより、引き続き Web ページ 1 アプリケーションを実行し、新しい Web ページ 2 アプリケーションをビルドし、それらのすべてを同じコンピューター上で実行できます。

WebMatrix を使用して Web Pages 2 ベータ版をインストールする際に覚えておく必要がある点を次に示します。

  • 既定では、既存の Web ページ アプリケーションはコンピューター上でバージョン 2 のアプリケーションとして実行されます。 (バージョン 2 のアセンブリは GAC にインストールされ、自動的に使用されます)。

  • Web ページ バージョン 1 を使用してサイトを実行する場合は (前の時点のように既定ではなく)、サイトを構成してこれを行うことができます。 サイトのルートに まだweb.config ファイルがない場合は、新しいファイルを作成し、次の XML をコピーして既存のコンテンツを上書きします。 サイトに既にweb.config ファイルが含まれている場合は、次のような要素を セクションに<configuration>追加<appSettings>します。

    <?xml version="1.0"?>
    <configuration>
    <appSettings>
    <add key="webPages:Version" value="1.0"/>
    </appSettings>
    </configuration>
    

    '- web.config ファイルでバージョンを指定しない場合、サイトはバージョン 2 サイトとして展開されます。 (バージョン 2 のアセンブリは、展開されたサイトの bin フォルダーにコピーされます)。

  • Web マトリックス バージョン 2 ベータ版のサイト テンプレートを使用して作成する新しいアプリケーションには、サイトの bin フォルダーに Web ページ バージョン 2 アセンブリが含まれます。

一般に、NuGet を使用してサイトの bin フォルダーに適切なアセンブリをインストールすることで、サイトで使用する Web ページのバージョンを常に制御できます。 パッケージを見つけるには、 NuGet.org にアクセスしてください。

モバイル デバイスのページのレンダリング

Web ページ 2 では、モバイルやその他のデバイスでコンテンツをレンダリングするためのカスタム ディスプレイを作成できます。

System.Web.WebPages名前空間には、表示モードDefaultDisplayModeを操作できる、、DisplayInfo、および DisplayModesの各クラスが含まれています。 これらのクラスを直接使用し、特定のデバイスに適した出力をレンダリングするコードを記述できます。

または、 FileName.Mobile.cshtml のようなファイル名付けパターンを使用して、デバイス固有のページを作成することもできます。 たとえば、 MyFile.cshtml という名前のページと MyFile.Mobile.cshtml という 2 つのバージョン のページを作成できます。 実行時にモバイル デバイスが MyFile.cshtml を要求すると、Web ページは MyFile.Mobile.cshtml からコンテンツをレンダリングします。 それ以外の場合、 MyFile.cshtml がレンダリングされます。

次の例は、モバイル デバイスのコンテンツ ページを追加してモバイル レンダリングを有効にする方法を示しています。 Page1.cshtml には、コンテンツとナビゲーション サイドバーが含まれています。 Page1.Mobile.cshtml には同じコンテンツが含まれていますが、サイドバーは省略されています。

コード サンプルをビルドして実行するには:

  1. Web ページ サイトで、 Page1.cshtml という名前のファイルを作成し、 例から Page1.cshtml コンテンツをコピーします。

  2. Page1.Mobile.cshtml という名前のファイルを作成し、例から Page1.Mobile.cshtml コンテンツをコピーします。 ページのモバイル バージョンでは、小さな画面でのレンダリングを向上するためにナビゲーション セクションが省略されていることに注意してください。

  3. デスクトップ ブラウザーを実行し、 Page1.cshtml を参照します。

  4. モバイル ブラウザー (またはモバイル デバイス エミュレーター) を実行し、 Page1.cshtml を参照します。 今回の Web ページでは、ページのモバイル バージョンがレンダリングされます。

    注意

    モバイル ページをテストするには、デスクトップ コンピューター上で実行されるモバイル デバイス シミュレーターを使用できます。 このツールを使用すると、モバイル デバイスで見たように Web ページをテストできます (通常は、表示領域がはるかに小さくなります)。 シミュレーターの 1 つの例として、Mozilla Firefox 用 の User Agent Switcher アドオン があり、デスクトップ バージョンの Firefox からさまざまなモバイル ブラウザーをエミュレートできます。

Page1.cshtml

<!DOCTYPE html>

<html lang="en">
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
    #navigation {
        position: absolute;
        top: 0;
        left: 0;
        width: 10em;
    }
    #content {
    margin-left: 13em;
        margin-right: 10em;
    }
</style>
</head>
<body>
<div id="navigation">
    <h3>Related Sites</h3>
    <ul>
        <li><a href="http://www.adventure-works.com/">Adventure Works</a></li>
        <li><a href="http://www.contoso.com/">Contoso, Ltd</a></li>
        <li><a href="http://www.treyresearch.net/">Trey Research</a></li>
    </ul>
</div>
<div id="content">
    <h1>Lorem ipsum dolor</h1>
    <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy
    eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
    At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,
    no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit
    amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut
    labore et dolore magna aliquyam erat, sed diam voluptua. </p>
    <p>At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd
    gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum
    dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
    ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam
    et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata
    sanctus est Lorem ipsum dolor sit amet.</p>
</div>
</body>
</html>

Page1.Mobile.cshtml

<!DOCTYPE html>

<html lang="en">
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
    #content {
    margin-left: 2em;
        margin-right: 5em;
    }
</style>
</head>
<body>
<div id="content">
    <h1>Lorem ipsum dolor</h1>
    <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy
    eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
    At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,
    no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit
    amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut
    labore et dolore magna aliquyam erat, sed diam voluptua. </p>
    <p>At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd
    gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum
    dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
    ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam
    et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata
    sanctus est Lorem ipsum dolor sit amet.</p>
</div>
</body>
</html>

デスクトップ ブラウザーでレンダリングされた Page1.cshtml:

topseven-displaymodes-1

Firefox ブラウザーの Apple iPhone シミュレーター ビューに表示される Page1.Mobile.cshtml。 要求が Page1.cshtml であっても、アプリケーションは Page1.Mobile.cshtml をレンダリングします

topseven-displaymodes-2

その他のリソース

ASP.NET Web ページ 1 リソース

注意

ほとんどの Web ページ 1 プログラミングおよび API リソースは、引き続き Web ページ 2 に適用されます。

WebMatrix リソース