WebSurfer's Home

トップ > Blog 1   |   ログイン
APMLフィルター

データバインド式

by WebSurfer 2010年8月17日 23:44

<%# 文字と %> 文字で囲んで用いるデータバインド式を使用すると、ページで DataBind メソッドが呼び出されたときに、サーバーコントロールプロパティとデータソースの間にバインディングが作成されます。

Eval や Bind メソッドを TextBox や Label コントロールの Text プロパティに以下のように設定して使うことが多いと思います。

Text='<%# Eval("Name") %>'

上記のような単純な使い方なら間違うことはなさそうですが、複雑な文字列を組み立てる場合は、別にそのためのメソッドを定義して用いるのがよさそうです。

例えば、以下のようにメソッドで文字列を組み立てて、

string Description(string s, int n)
{
  return String.Format("項目 {0} の数量は {1} です。", s, n);
}

それを以下のように設定できます。

Text='<%# Description((string)Eval("Name"), (int)Eval("Qty")) %>'

ただし、メソッドを使うまでもない簡単な文字列なら、例えば以下のようにする方がよいと思います。

Text='<%# "Name:" + Eval("Name") %>'

なお、以下のようにするのは、データバインド式を含めた全体が文字列として解釈されてしまうので、うまくいきません。

Text='Name:<%# Eval("Name") %>'

ありそうな間違いは、ImageUrl や NavigateUrl に、例えば、以下のように設定するケースでしょうか。

ImageUrl='~/Images/<%# Eval("Name") %>'

この結果は以下のようになってしまいます。

src="Images/%3C%25#%20Eval(%22Name%22)%20%25%3E"

(注)ImageUrl の場合は UrlEncode されるので、< や % などが %3C と %25 になります。一方、NavigateUrl の方は何故か UrlEncode されません。

Tags: ,

ASP.NET

About this blog

2010年5月にこのブログを立ち上げました。主に ASP.NET Web アプリ関係の記事です。

Calendar

<<  2024年3月  >>
252627282912
3456789
10111213141516
17181920212223
24252627282930
31123456

View posts in large calendar