方法 : カスタム ページ テンプレートを使用して個々のテーブルのレイアウトをカスタマイズする
更新 : 2007 年 11 月
一般に、ASP.NET Dynamic Data を使用する場合、2 つの方法でカスタム レイアウトを定義できます。フィールド テンプレートはフィールドに固有の動作に合わせてカスタマイズでき、ページ テンプレートはテーブルに固有の動作に合わせてカスタマイズできます。
1 つ目の方法は、カスタム フィールド テンプレートを作成して、テーブル内のデータ フィールドをカスタマイズする方法です。次に、テーブルを表すエンティティ クラスに一致する名前を持つ部分クラスを作成します。部分クラスでは、UIHintAttribute 属性を使用して、表示に使用するカスタム フィールド テンプレートの名前を指定します。詳細については、「方法 : Dynamic Data コントロールでデータ フィールドの外観と動作をカスタマイズする」を参照してください。
2 つ目の方法は、DynamicData\CustomPages フォルダ内にサブフォルダを作成する方法です。サブフォルダには、カスタマイズするテーブルのデータ コンテキスト クラス内のテーブル アクセサと一致する名前を付けます。次に、カスタム ページ テンプレートをフォルダ内に作成します。このトピックでは、2 つ目の方法について説明します。
既定のページ テンプレートは、すべてのテーブルに対応するようになっており、スキーマに固有の情報は使用されていません。ただし、特定のテーブルに対してカスタム ページ テンプレートを使用する場合は、スキーマ情報を使用して特定のフィールドを表示できます。
カスタム ページ テンプレートを作成するには
スキャフォールディングが有効になっていることを確認します。Global.asax ファイルで、MetaModelRegisterContext() メソッドの ContextConfiguration.ScaffoldAllTables プロパティを true に設定します。
スキャフォールディングを有効にし、List アクションを有効にするための呼び出しを含む RegisterRoutes メソッドを次の例に示します。
Public Shared Sub RegisterRoutes(ByVal routes As RouteCollection) Dim model As New MetaModel model.RegisterContext(GetType(AdventureWorksLTDataContext), _ New ContextConfiguration() With {.ScaffoldAllTables = True}) routes.Add(New DynamicDataRoute("{table}/{action}.aspx") With { _ .Constraints = New RouteValueDictionary(New With _ {.Action = "List|Details|Edit|Insert"}), _ .Model = model}) End Sub
public static void RegisterRoutes(RouteCollection routes) { MetaModel model = new MetaModel(); model.RegisterContext(typeof(AdventureWorksLTDataContext), new ContextConfiguration() { ScaffoldAllTables = true }); routes.Add(new DynamicDataRoute("{table}/{action}.aspx") { Constraints = new RouteValueDictionary(new { action = "List|Details|Edit|Insert" }), Model = model }); }
スキャフォールディングの有効化の詳細については、「チュートリアル : スキャフォールディングを使用した新しい Dynamic Data Web サイトの作成」を参照してください。
DynamicData\CustomPages フォルダに、サブフォルダを作成します。フォルダ名に関しては、以下のガイドラインに従ってください。
データ モデルが LINQ to SQL に基づいている場合は、データ コンテキストのテーブル名をフォルダ名として使用します。たとえば、AdventureWorksLT データベースの Product テーブルのカスタム ページを作成する場合は、DynamicData\CustomPages\Products という名前のディレクトリを作成します。
データ モデルが ADO.NET Entity Framework に基づいている場合は、オブジェクト コンテキストのテーブル名をフォルダ名として使用します。たとえば、AdventureWorksLT データベースの Product テーブルのカスタム ページを作成する場合は、DynamicData\CustomPages\Product という名前のディレクトリを作成します。
DynamicData\PageTemplates フォルダから、DynamicData\CustomPages 以下のテーブル アクセサと同じ名前のサブフォルダに、既存のページ テンプレートをコピーします。
たとえば、DynamicData\PageTemplates\List.aspx を、DynamicData\CustomPages\Products (LINQ to SQL の場合) または DynamicData\CustomPages\Product (Entity Framework の場合) にコピーします。
前の手順でコピーしたページ テンプレートをカスタマイズします。
変更が加えられた見出しのマークアップを次の例に示します。
<h2> Custom Pages Demo <%= table.DisplayName%></h2>
カスタム テンプレートをテストするには、ブラウザ内でテーブルを表示し、変更がテンプレートに反映されていることを確認します。
たとえば、Product テーブルを表示します。"Custom Pages Demo Product" (LINQ to SQL) および "Custom Pages Demo Product" (Entity Framework) という表示を確認します。
参照
処理手順
チュートリアル : スキャフォールディングを使用した新しい Dynamic Data Web サイトの作成
概念
ASP.NET Dynamic Data スキャフォールディングとページ テンプレートの概要