我有一个 ASP.NET Web 表单,我不希望根据页面/编译器指令处理标记。例子:
<%@ Page ... CompilerOptions="/d:MY_FLAG" %>
<% #if MY_FLAG %> ... <% #endif %>'
我在#if 块中有控件,这些控件引用不包含在构建中的代码隐藏方法,除非设置了类似的#define。问题是,无论我如何实现条件标记,运行时都会检查块中是否存在方法,即使该块不会被渲染。因此,对于一个甚至不存在的控件,如果没有任何方法,就会在运行时引发异常。
我可以根据代码隐藏中的编译器指令在运行时注入标记来解决这个问题。我只是想了解为什么这不起作用。
需要明确的是,如果我们将#if FOO
代码放入标记中,VS 将禁用它,并且不会在构建或运行时以任何方式处理它。我想要相同的标记功能。
我的描述就是这样。以下只是对类似注释的引用。
此处的注释说您不能在条件代码中重用控件名称。显然这是因为上面的问题 - 编译器会处理控制名称,即使它们不会被使用。
此页面和 K Scott Allen(代码颂)的相关页面描述了条件标记,但不包括此处描述的情况。
此页面描述了在运行时做出决定的条件标记。我不希望在运行时做出决定。这就是问题所在——运行时将尝试验证代码隐藏是否支持标记。就我而言,如果标记不“存在”,则不需要这样做。