【问题标题】:How it is possible to reach a variable from a different code-block expression than the block where the variable was declared?如何从与声明变量的块不同的代码块表达式中访问变量?
【发布时间】:2010-10-25 13:58:49
【问题描述】:

下面有人能解释一下asp.Net的工作原理吗?

我在一个 aspx 标记中有 2 个单独的代码块 asp.Net 表达式,中间有一个 html 内容(下例中的 span 元素)。

在第一个代码块中,有“i”作为 for 循环的增量变量。

然后代码块被切割成 html 内容。

另一个代码块表达式被打开,但正如我所见,我可以到达在前一个代码块中声明的“i”变量。

那么,asp.net 如何处理 - 编译 - 标记中声明的代码块 experrions 片段?它是否会检查分号并生成一些匿名方法,这些方法最终会导致对 Response.Write 的多次调用?

谢谢,

<p>
   <%for (int i = 0; i < 30; i++)
     {
         Response.Write("Some text here");

         %>

     <span> ______________________________ </span> <%--So how this line is processed 
                                                    by ASP.Net so that it is embedded 
                                                    in the for loop as Response.Write 
                                                    method's parameter?--%>

   <%
         Response.Write(i*(i+1));

         Response.Write("<br />");
     }%>
</p>

【问题讨论】:

  • 我建议你编译一个aspx-page(已经编译好了),然后用reflector看看。您可以使用 aspnet_compiler.exe 进行编译(保留:类似名称),或者只是访问该页面,然后尝试在 asp.net 的临时文件中找到它。那将解释很多:)

标签: .net asp.net compiler-construction codeblocks


【解决方案1】:

您将 C# 代码的范围与内联 ASPX 标记混淆了。 ACTUAL 代码块位于花括号 { } 之间,无论该代码块内是什么,在上述情况下,HTML 代码仍在单个块内。

只需寻找打开和关闭大括号,它们定义了您的代码块,% 符号在 HTML/C# 代码中进出。

【讨论】:

  • 所以在这种情况下剩下的 - 内容(如上面的 元素)全部转移到 Response.Write('whatever the content in markup');据我了解。
  • @burak ozdogan - 如果您将整个片段重写为单个代码执行而不会中断 html,这将是有益的。然后您会看到带有&lt;span&gt;___&lt;/span&gt; 的代码部分在此上下文中评估为Response.Write("&lt;span&gt;___&lt;/span&gt;);&lt;% 块不是功能范围定义。
  • 好吧,这一切都被编译成中间语言,因此与创建大量 Response.Write 语句并不完全相同,但理论上是的,最终结果是相同的。
【解决方案2】:

您引用的行没有使用它上面的 Response.Write 调用。它只是网页中嵌入的文本。

&lt;span&gt; 标签不是 C# 代码的“客人”; C# 代码是 ASP 网页的访客(&lt;span&gt; 标签是其中的一部分)。

【讨论】:

    猜你喜欢
    • 2015-03-31
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多