我的母版页中有一些代码,用于设置包含一些上下文敏感信息的超链接
<%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 部分。如果我删除动态代码,错误就会消失。谁能告诉我如何解决这个问题?
最佳答案
我找到了 answer在 .net 论坛上。它很好地解释了 ASP.Net 为什么会这样:
We have finally obtained reliable repro and identified the underlying issue. A trivial repro looks like this:
<% if (true) { %>
<%=1%>
<% } %>
<%=2%>
In order to provide intellisense in <%= %> blocks at design time, ASP.NET generates assignment to a temporary __o variable and language (VB or C#) then provide the intellisense for the variable. That is done when page compiler sees the first <%= ... %> block. But here, the block is inside the if, so after the if closes, the variable goes out of scope. We end up generating something like this:
if (true) { object @__o; @__o = 1; } @__o = 2;
The workaround is to add a dummy expression early in the page. E.g. <%="" %>. This will not render anything, and it will make sure that __o is declared top level in the Render method, before any potential ‘if’ (or other scoping) statement.
另一种解决方案是简单地使用
<% response.write(var) %>
而不是
<%= var %>
关于asp.net - 我如何摆脱未声明的 __o ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/750902/