ASP.NETでは次のようにWebフォーム内でインライン形式で文字列の出力することができます。

<%= SomeMethod() %>

今回はテンプレートコントロールなどで使うことができるデータバインディングの構文をメモとして掲載します。

1. ASP.NET 1.0/1.1でのデータバインディング構文

ASP.NET 1.0/1.1のときのDataListやRepeaterコントロールのテンプレートで使用するデータバインディング構文例は次のようなものです。

<%# Container.DataItem("Name") %>
<%# Container.DataItem("Address") %>
<%# DataBinder.Eval(Container.DataItem, "BirthDate", "{0:yyyyMMdd}") %>

DataBinder.Evalはフォーマットした形式にしたい場合に使用できます。データバインドはreadonlyとなります。

2. ASP.NET 2.0 以降のデータバインディング構文

ASP.NET 2.0以降のテンプレート内で使用するデータバインディング構文は次のような形式です。

<%# Eval("Name") %>
<%# Eval("BirthDate", "{0:yyyyMMdd}") %>

2方向のバインディングを行いたい場合はBindを使います

<%# Bind("Name") %>

バインディング式<%# %>の内部は式として扱われるので、次のように文字列を連結したり、フォームのメソッドを呼び出せます。

<%# "Hello " + Eval("Name") %>
<%# Format(Eval("Name")) %>

3. おまけXMLデータバインディング

XPathBinderクラスを使用するとXMLのデータバインディングを行えます。

<% XPathBinder.Eval(Container.DataItem, "users/user/name") %>
<% XPath("users/user/name") %>
<% XPath("users/user/BirthDate", "{0:yyyyMMdd}") %>

XPathBinderは単一ノードを返します。XmlDataSourceから複数のノードを返したい場合は、Selectメソッドを使用します。

<% XPathBinder.Select(Container.DataItem, "users/user") %>

説明は以上です。誤り等がありましたらご指摘ください。

4. ASP.NET 4.5 で導入されたバインディング構文

データバインドWebサーバーコントロールに追加された ItemType 属性を使用すると、マークアップ記述時に、インテリセンスを使用したバインド構文を記述できるようになりました。

<%# Item.プロパティ名 %>および <%# BindItem.プロパティ名 %> のように使用します。 Item を使用する場合は従来のEvalを使用するものに対応します。BindItemを使用する場合か Bind を使用する構文に対応します。使用例に関してはItemType を使用してインテリセンスがサポートされるバインディング構文を記述するを参照してください。