我怎么摆脱__o没有声明?

时间:2009-04-15 09:19:15

标签: asp.net

我的母版页中有一些代码,用于设置带有一些上下文敏感信息的超链接

<%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部分。如果我删除动态代码,则错误消失。谁能告诉我如何解决这个问题?

5 个答案:

答案 0 :(得分:68)

我在.net论坛上找到了answer。它很好地解释了为什么ASP.Net的行为方式如下:

  

我们终于获得了可靠的复制品并确定了潜在的问题。一个琐碎的复制品看起来像这样:

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

为了在&lt;%=%&gt;中提供智能感知在设计时,ASP.NET生成对临时__o变量和语言(VB或C#)的赋值,然后为变量提供intellisense。当页面编译器看到第一个&lt;%= ...%&gt;时,就会这样做。块。但是在这里,块在if中,所以在if关闭之后,变量超出了范围。我们最终会产生这样的结果:

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

解决方法是在页面的早期添加虚拟表达式。例如。 &lt;%=“”%&gt;。这不会呈现任何内容,并且它将确保在任何可能的'if'(或其他作用域)语句之前,在Render方法中将__o声明为顶级。

另一种解决方案是简单地使用

<% response.write(var) %>

而不是

<%= var %>

答案 1 :(得分:15)

是的,我在ASPX页面上使用服务器端构造的页面偶尔会遇到同样的错误。

加班,我发现了一个修复程序(对不起,我只是无法找到我再次找到这些信息的地方。)而且修复是将以下代码置于错误{{ {1}}阻止:

<%...%>

显然,你把上面的代码放在VS.NET中会有所不同,所以可能需要几次尝试才能做到正确。

答案 2 :(得分:4)

这是一个奇怪的解决方案,但对我来说,我设法通过简单地关闭Visual Studio中有问题的打开文件来解决这个问题。

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

一旦我关闭它们,__ o问题就消失了。

答案 3 :(得分:0)

经过几个小时的谷歌搜索和分析我目前的项目中的一堆aspx'ses似乎我找到了解决方案,这对我有用。建议强烈避免使用html风格的评论:

<!-- ... -->

在aspx页面内。而不是使用aspx风格的评论

<%-- ... --%>

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

答案 4 :(得分:0)

当我清理完解决方案后,重新启动IIS并且它仍然神秘地播放,我发现这有时可能是因为将ASPX源文件的内容从另一个系统粘贴到Visual Studio中,这有助于“帮助”更新代码,可能更改一些ID并破坏页面。

将其粘贴到另一个编辑器(Notepad ++?)然后保存它会阻止Visual Studio“有用”并且页面再次起作用。