Mikhail Arkhipov 在ASP.NET论坛中发布了解释和解决方法:
我们终于获得了可靠的复制品并确定了潜在的问题.一个琐碎的repro看起来像这样:
Run Code Online (Sandbox Code Playgroud)<% if (true) { %> <%=1%> <% } %> <%=2%>为了在设计时在<%=%>块中提供intellisense,ASP.NET生成对临时__o变量和语言(VB或C#)的赋值,然后为变量提供intellisense.当页面编译器看到第一个<%= ...%>块时,就会这样做.但是在这里,块在if中,所以在if关闭之后,变量超出了范围.我们最终生成这样的东西:
Run Code Online (Sandbox Code Playgroud)if (true) { object @__o; @__o = 1; } @__o = 2;解决方法是在页面的早期添加虚拟表达式.例如<%=""%>.这不会呈现任何内容,并且它将确保在任何可能的'if'(或其他作用域)语句之前,在Render方法中将__o声明为顶级.
| 归档时间: |
|
| 查看次数: |
2048 次 |
| 最近记录: |