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