Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET代码控件令人困惑_Asp.net_Vb.net - Fatal编程技术网

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
来在写入响应之前,首先构建整个字符串(除非响应绑定到该编写器中——从反编译的框架代码中很难分辨),但想法是一样的。我想说你所说的更正确,你只是没有“看到”代码,所以调试器没有什么可以停止的。