ASP.NET代码控件令人困惑
我在一个项目中发现了这个:ASP.NET代码控件令人困惑,asp.net,vb.net,Asp.net,Vb.net,我在一个项目中发现了这个: <% If Session("VALUE1") <> "" Then %> document.forms[0].action= "<%=Session("VALUE1")%>"; <% Else %> document.forms[0].action="NewPage.aspx" <% End If %> document.forms[0]。action=“”; document.f
<% If Session("VALUE1") <> "" Then %>
document.forms[0].action= "<%=Session("VALUE1")%>";
<% Else %>
document.forms[0].action="NewPage.aspx"
<% End If %>
document.forms[0]。action=“”;
document.forms[0]。action=“NewPage.aspx”
当我从顶行开始单步执行此操作时,代码跳过If会话(“VALUE1”),但也跳过Else。这怎么可能呢?在
If
和Else
块中,没有实际的服务器代码,只有标记(恰好是javascript)。因为没有什么可执行的,所以调试器没有任何可停止的地方。所以它实际上并没有跳过这两个步骤
如果查看呈现的输出,其中一个将出现在页面上。在
If
和Else
块中,没有实际的服务器代码,只有标记(恰好是javascript)。因为没有什么可执行的,所以调试器没有任何可停止的地方。所以它实际上并没有跳过这两个步骤
如果查看呈现的输出,两个输出中的一个将出现在页面上。代码没有被跳过,只是看不到实际执行的代码 编译页面时为该标记生成的代码如下所示:
If Session("VALUE1") <> "" Then
Response.Write(" document.forms[0].action= """)
Response.Write(Session("VALUE1"))
Response.Write(""";")
Else
Response.Write(" document.forms[0].action=""NewPage.aspx""")
End If
如果会话(“VALUE1”)“”则
Response.Write(“document.forms[0].action=”“”)
响应。写入(会话(“值1”))
回答。写(“;”)
其他的
Response.Write(“document.forms[0].action=”“NewPage.aspx”“”)
如果结束
由于生成了
Response.Write
语句,并且在源代码中没有相应的语句,因此当您单步浏览代码时,这些语句看起来会被跳过。代码没有被跳过,只是您看不到实际执行的代码
编译页面时为该标记生成的代码如下所示:
If Session("VALUE1") <> "" Then
Response.Write(" document.forms[0].action= """)
Response.Write(Session("VALUE1"))
Response.Write(""";")
Else
Response.Write(" document.forms[0].action=""NewPage.aspx""")
End If
如果会话(“VALUE1”)“”则
Response.Write(“document.forms[0].action=”“”)
响应。写入(会话(“值1”))
回答。写(“;”)
其他的
Response.Write(“document.forms[0].action=”“NewPage.aspx”“”)
如果结束
由于生成了
Response.Write
语句,并且在源代码中没有相应的语句,因此当您单步执行代码时,这些语句看起来会被跳过。您是使用Visual Studio单步执行还是使用浏览器javascript调试器?您是使用Visual Studio单步执行,或者使用浏览器javascript调试器?那里实际上有服务器代码,实际上是执行的。服务器标记之外的所有标记都放在Response.Write
语句中。@Guffa很好的观点-我刚刚使用DLL发布了页面内容,看起来它在写入响应之前首先使用HtmlTextWriter
构建整个字符串(除非响应与作者有关——从反编译的框架代码中很难分辨),但想法是一样的。我想说你说的话会更正确,你只是没有“看到”代码,所以调试器没有什么可以停止的。那里实际上有服务器代码,它实际上是被执行的。服务器标记之外的所有标记都放在响应中。写语句。@Guffa很好的一点-我刚刚用DLL发布了页面内容,看起来它正在使用HtmlTextWriter
来在写入响应之前,首先构建整个字符串(除非响应绑定到该编写器中——从反编译的框架代码中很难分辨),但想法是一样的。我想说你所说的更正确,你只是没有“看到”代码,所以调试器没有什么可以停止的。