WebSurfer's Home

トップ > Blog 1   |   Login
Filter by APML

データバインド式

by WebSurfer 17. August 2010 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月にこのブログを立ち上げました。その後 ブログ2 を追加し、ここは ASP.NET 関係のトピックス、ブログ2はそれ以外のトピックスに分けました。

Calendar

<<  December 2019  >>
MoTuWeThFrSaSu
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

View posts in large calendar