方法は2つあります。
1つ目はembedded code blocks (<% … %>)を使います。If文を用いてその中に、要素を入れます。
2つ目はHtmlコントロール化した要素(状況によってはWebコントロール要素)の”Visible”値を利用します。
書き方 – 1つ目の方法
<% if(…){ %>
your code
<% } %>
ex.
<% if (this.IsGeneralManager){ %>
<p>トップシークレット情報</p></ br>
<p>=== 社外秘 ===</p>
<p>取締役会長の好きな食べ物はティラミス</p>
<p>=== 社外秘 ===</p>
<% } %>
書き方 – 2つ目の方法
<htmltag ID="..." Visible="<% ... %>" runat="server">
your code
</htmltag>
<tr ID="trCredential" Visible="<%# this.IsSecretary %>" runat="server">
<td>
トップシークレット情報</ br></ br>
=== 社外秘 ===</ br>
取締役会長の好きな食べ物はティラミス</ br>
=== 社外秘 ===</ br>
トップシークレット情報</ br>
</td>
</tr>
長所
* 効率的
複数の要素をまとめて指定して、一度に表示と非表示を切り替えられます。
短所
* 可読性が落ちやすい
この方法でIf文を多用しなければ、他の2つの方法に比べて大して可読性は変わらないと思います。しかし、If文のネストが深くなると話は別で、可読性は落ちてしまいます。また、条件文が長いとさらに見にくくなります。
* その都度、値の代入が必要
(<% if(コードビハインドのプロパティ) {} %>を利用する場合)
条件文にコードビハインドのプロパティを当てはめて<% if() {} %>を使用する場合は注意が必要です。Postbackか否かにかかわらず、そのプロパティの値は保持されないので、ページに対してリクエストを送る度に値を代入することが求められます。一方でコントロールの値はPostback時であれば、保持されます。つまり、以下の”this.IsGeneralManager”の値は保持されないので、このプロパティをPostback時に再び利用する場合は、値を再度代入する必要があります。
<% if (this.IsGeneralManager){ %>
<p>トップシークレット情報</p>
<% } %>
if (!Postback)
{
this.IsGeneralManager= true;
}
else
{
var isGeneralManager = this.IsGeneralManager; // false
this.IsGeneralManager= true; // 代入が必要
if (this.IsGenerealManager)
{
...
}
}
一方で理想的な実装方法かどうかはさておき、webコントロールのプロパティを使用すれば、プロパティに値を再度代入する必要はありません。
<tr ID="trCredential" Visible="<%# this.IsSecretary %>" runat="server">
<td>
トップシークレット情報
</td>
</tr>
if (!Postback)
{
trCredential.Visible = true;
}
else
{
var isVisible = trCredential.Visible; // true
if (isVisible)
{
...
}
}
どっちを使えばいいの?
“え、2つ方法のうちどっち使えばいいんだよ。”
という疑問をお持ちの方もいると思います。
その問いに対する答えは、コードビハインドで表示と非表示を自由に切り替えたい場合は2つ目の方法を採用した方が良いです。なぜなら2つ目の方法はコントロールを利用して表示と非表示を切り替えているので、処理フロー内の任意の場所でそのコントロールの”Visible”プロパティの値を更新すれば表示と非表示を切り替えられるためです。
“え、2つ方法のうちどっち使えばいいんだよ。”
という疑問をお持ちの方もいると思います。
その問いに対する答えは、コードビハインドで表示と非表示を自由に切り替えたい場合は2つ目の方法を採用した方が良いです。なぜなら2つ目の方法はコントロールを利用して表示と非表示を切り替えているので、処理フロー内の任意の場所でそのコントロールの”Visible”プロパティの値を更新すれば表示と非表示を切り替えられるためです。