Aspx 代码块与 runat 服务器



我正在学习一些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

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

让我们从一开始就弄清楚一件事。您不是在学习 aspx,除非您试图了解此文件扩展名,否则您正在学习 ASP .Net 和更具体的 ASP .Net Web 窗体

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

此标记可以包含纯 html、服务器控件(<asp:Label /> 等)、代码块、数据绑定表达式、资源表达式等等。

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

可能你已经看过这个例子,现在你可以发现这是某种语法糖。

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

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

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

服务器代码和客户端代码

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

<% ... %>块表示框架代码(在本例中为C#),而文档的其余部分是纯HTML。
因此,块用于区分代码和简单标记。

当您将

runat="server"添加到 html 元素时,它会将其转换为服务器端对象。这意味着在设计器文件中创建了一个HtmlForm实例。不包括标记内的内容,除非有其他服务器端控件将添加到控件树中。在标签中,你又回到了编写纯HTML的状态,直到你把其他东西放进去让.Net注意,<% =GetTime()%>例如。

代码块只是允许处理引擎知道要执行页面的哪些部分(否则将很难分辨页面的哪些部分是代码,哪些只是标记)。

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

如果你写

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

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

而不是重写一个已经很好的答案:这是关于 runat 服务器的 SO 问题

简而言之

,浏览器从您的服务器请求页面,然后 ASP.NET 处理任何可执行代码,即<% ... %>块中的任何代码,然后将结果发送回浏览器。

另一种看待它的方法是,你想要运行服务器端的任何代码都应该在<% ... %>块内,其他一切都是客户端。

最新更新