【问题标题】:Aspx code blocks vs runat serverAspx 代码块与 runat 服务器
【发布时间】:2012-04-11 14:37:29
【问题描述】:

我正在学习一些 aspx 并有一个问题。我有以下示例代码:

<%@ Page Language="C#" %>
<html>
<body>
    <form id="form1" runat="server">
       Current server time is <% =GetTime()%>.
    </form>
</body>
</html>

现在我不明白的是,如果表单已经在服务器上运行,为什么我们又需要 代码块?也许我不理解代码块和页面上服务器上运行的整体之间的区别。谁能澄清我对这里发生的事情的误解?我只是不太了解 aspx 页面的服务器端与客户端术语。

我也见过这样的代码:

<script language="VB" runat="server">
Dim ....

Public Sub PageLoad()
...
Response.Write("Hello")
End Sub
</script>

<% If dataExists(whatever) Then %>
HelloWorld

现在为什么不能消除上面的代码块?我的意思是在服务器标签中,该代码已经在服务器端运行并发出一些写入请求。然后你有代码块正在做一些逻辑检查以再次编写。为什么要把这些分开?他们不是相同的功能还是我错过了什么?

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    让我们从头说清楚。您不是在学习 aspx,除非您想了解此文件扩展名,否则您正在学习 ASP .Net 和更具体的ASP .Net Web 表单

    Web 窗体中的标记(aspx 文件中的代码)由 ASP .Net 解析,然后将生成一个类,稍后将使用该类来实际创建 HTML。

    此标记可以包含纯 html、服务器控件(&lt;asp:Label /&gt; 等)、代码块、DataBinding 表达式、资源表达式和 many more

    所有这些都只是解析以获得生成的类。生成的类将包含或多或少的指令,供作者编写一些字符串(如果需要,可以使用 html)。

    您可能已经看过this example,现在您会发现这是某种语法糖。

     <% { Response.Write(DateTime.Now.ToString()); }%>
    

     <%= DateTime.Now.ToString() %>
    

    它产生相同的东西,但以两种不同的方式编写。该语法只是被解析。

    服务器代码和客户端代码只有一个区别:服务器代码运行在服务器上,客户端代码运行在客户端。该客户端代码由(或可能)由服务器生成,因此客户端可以在其一侧运行它。

    【讨论】:

      【解决方案2】:

      &lt;% ... %&gt; 块表示框架代码(在此示例中为 C#),而文档的其余部分是纯 HTML。
      所以块用来区分代码和简单标记。

      【讨论】:

        【解决方案3】:

        当您将runat="server" 添加到 html 元素时,它会将其转换为服务器端对象。这意味着在 Designer 文件中创建了一个 HtmlForm 实例。不包括标签内的内容,除非有其他服务器端控件将添加到控件树中。在标签内,您将回到编写普通的 Html 代码,直到您为 .Net 加入其他需要注意的内容,例如 &lt;% =GetTime()%&gt;

        【讨论】:

          【解决方案4】:

          代码块只是让处理引擎知道要执行页面的哪些部分(如果不这样做,就很难分辨页面的哪些部分是代码,哪些部分是简单的标记)。

          【讨论】:

            【解决方案5】:

            代码块是从 C# 代码中描述严格的 HTML 的方式。

            如果你写了

            <form id="form1" runat="server">
                Current server time is GetTime().
            </form>
            

            然后您将逐字获取文本。只有当您添加代码块时,解析器才能理解为 HTML 的特定部分切换到 C# 代码。

            而不是重写一个已经很好的答案:Here is the SO question as to what the runat server is for

            【讨论】:

              【解决方案6】:

              简而言之,浏览器从您的服务器请求页面,然后 ASP.NET 处理任何可执行代码,即 &lt;% ... %&gt; 块中的任何代码,然后将结果发送回浏览器。

              另一种看待它的方式是,您要在服务器端运行的任何代码都应该在&lt;% ... %&gt; 块内,其他一切都是客户端。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-06-03
                • 2010-12-16
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多