1

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

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

4

6 回答 6

2

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

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

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

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

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

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

对比

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

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

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

于 2012-04-11T15:01:11.330 回答
0

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

于 2012-04-11T14:40:40.817 回答
0

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

于 2012-04-11T14:40:48.690 回答
0

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

于 2012-04-11T14:40:50.873 回答
0

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

如果你写

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

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

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

于 2012-04-11T14:41:04.883 回答
0

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

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

于 2012-04-11T14:45:10.843 回答