我怎么摆脱__o没有宣布?

我有一些代码在我的母版页设置一个超链接与一些上下文相关的信息

<%If Not IsNothing(Profile.ClientID) Then%> <span class="menu-nav"> <a target="_blank" href= "http://b/x.aspx?ClientID=<%=Profile.ClientID.ToString()%>&Initials=<%=Session("Initials")%>" > Send <br /> SMS <br /> </a> </span> <%End If %> <span class="menu-nav"> <!-- Name __o is not declared Error is flagged here--> 

现在这个问题似乎在href部分。 如果我删除dynamic代码错误消失。 谁能告诉我如何解决这个问题?

我在.net论坛上find了答案 。 它包含了一个很好的解释,为什么ASP.Net是这样做的:

我们终于获得了可靠的回报,并确定了潜在的问题。 一个微不足道的repro看起来像这样:

  <% if (true) { %> <%=1%> <% } %> <%=2%> 

为了在devise时在<%=%>块中提供智能感知,ASP.NET生成一个临时__ovariables和语言(VB或C#)的赋值,然后为该variables提供智能感知。 当页面编译器看到第一个<%= …%>块时就完成了。 但是在这里,块在if里面,所以if在closures之后,variables超出了范围。 我们最终生成这样的东西:

  if (true) { object @__o; @__o = 1; } @__o = 2; 

解决方法是在页面的早期添加一个虚拟expression式。 例如<%=“”%>“。 这不会渲染任何东西,并且会确保在任何潜在的“if”(或其他范围)语句之前,__o在Render方法中被声明为顶层。

另一种解决scheme是简单地使用

 <% response.write(var) %> 

代替

 <%= var %> 

是的,在ASPX页面上使用服务器端结构的页面中偶尔会遇到同样的问题。

加class,我find了一个修复它(我很抱歉,我只是一直无法find我在哪里find了这一点的信息了),并修复是把以下代码错误<%...%> block:

 <%-- For other devs: Do not remove below line. --%> <%="" %> <%-- For other devs: Do not remove above line. --%> 

显然,你把上面的代码放在VS.NET里面,所以可能需要一些尝试才能把它做好。

这是一个奇怪的解决scheme,但对我来说,我设法解决这个问题,只需closuresVisual Studio中的违规打开的文件。

随着他们打开,我不正常地得到__o问题。

一旦我closures它们,__o问题就消失了。

经过几个小时的谷歌search和分析一堆aspx'ses在我目前的项目似乎我find了解决scheme,这是为我工作。 会强烈build议避免html风格的评论:

<!-- ... -->

里面的aspx页面。 而不是使用aspx样式的注释

<%-- ... --%>

此外,它帮助我获得了vs智能感知和代码突出显示再次工作,主要的事情 – 这个案例已经开始了 – 现在可以打到embedded式的vb / cs代码片断的断点! 并没有任何该死的“这不是一个有效的断点”的消息。