ページ/コンパイラ ディレクティブに基づいてマークアップをまったく処理したくない ASP.NET Web フォームがあります。例:
<%@ Page ... CompilerOptions="/d:MY_FLAG" %>
<% #if MY_FLAG %> ... <% #endif %>'
同様の #define が設定されていない限り、ビルドに含まれないコード ビハインド メソッドを参照する #if ブロック内のコントロールがあります。問題は、条件付きマークアップをどのように実装しても、ブロックがレンダリングされない場合でも、ランタイムがブロック内のメソッドの存在をチェックすることです。したがって、存在しないコントロールのメソッドがない場合、実行時に例外がスローされます。
コード ビハインドのコンパイラ ディレクティブに応じて、実行時にマークアップを挿入することで、これを回避するコーディングを行うことができます。なぜこれが機能しないのかを理解したいだけです。
明確にするために、#if FOO
コードをマークアップに入れると、VS はそれを無効にし、ビルドまたは実行時にまったく処理されません。マークアップにも同じ機能が必要です。
それが私の説明です。以下は、同様のメモへの参照です。
ここでの注意は、条件付きコード内でコントロール名を再利用できないことを示しています。どうやらこれは上記の問題によるもので、コンパイラは使用されない場合でもコントロール名を処理します。
このページと K Scott Allen (Ode to Code) による関連ページでは、条件付きマークアップについて説明していますが、ここで説明する状況については説明していません。
このページでは、実行時に決定が行われる条件付きマークアップについて説明します。実行時に決定を下したくありません。それが問題です。ランタイムは、コード ビハインドがマークアップをサポートしていることを確認しようとします。私の場合、マークアップが「存在」しない場合は、それを行う必要はありません。