我的母版页中有一些代码,用于设置带有一些上下文敏感信息的超链接
<%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-->
Run Code Online (Sandbox Code Playgroud)
现在问题似乎在href部分.如果我删除动态代码,则错误消失.谁能告诉我如何解决这个问题?
Pet*_*ter 69
我在.net论坛上找到了答案.它包含了一个很好的解释,为什么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声明为顶级.
另一种解决方案是简单地使用
<% response.write(var) %>
Run Code Online (Sandbox Code Playgroud)
代替
<%= var %>
Run Code Online (Sandbox Code Playgroud)
Cer*_*rus 15
是的,我偶尔会在使用ASPX页面上的服务器端构造的页面中遇到相同的错误.
加班,我找到了一个修复程序(对不起,我只是无法找到我再次找到这些信息的位置.)并且修复是将以下代码放在错误的<%...%>块上方:
<%-- For other devs: Do not remove below line. --%>
<%="" %>
<%-- For other devs: Do not remove above line. --%>
Run Code Online (Sandbox Code Playgroud)
显然,你把上面的代码放在VS.NET中会有所不同,所以可能需要几次尝试才能正确完成.
| 归档时间: |
|
| 查看次数: |
17681 次 |
| 最近记录: |