我的母版页中有一些代码,用于设置带有一些上下文敏感信息的超链接
<%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部分。如果我删除动态代码,则错误消失。谁能告诉我如何解决这个问题?
答案 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“有用”并且页面再次起作用。