C# Aspx代码块与runat服务器

C# Aspx代码块与runat服务器,c#,asp.net,C#,Asp.net,我正在学习一些aspx,有一个问题。我有以下示例代码: <%@ Page Language="C#" %> <html> <body> <form id="form1" runat="server"> Current server time is <% =GetTime()%>. </form> </body> </html> 当前服务器时间为。 现在我不明白的是,

我正在学习一些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),而文档的其余部分是纯HTML。

因此块用于区分代码和简单标记。

当您将
runat=“server”
添加到html元素时,它会将其转换为服务器端对象。这意味着在设计器文件中创建了一个
HtmlForm
实例。标签内的内容不包括在内,除非有其他服务器端控件将添加到控件树中。在标记内部,您将重新编写纯Html,直到您为.Net添加了其他需要注意的内容,例如,

代码块只允许处理引擎知道要执行页面的哪些部分(如果不这样做,则很难判断页面的哪些部分是代码,哪些部分只是标记).

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

如果你写

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

当前服务器时间为GetTime()。
然后你会一字不差地得到文本。只有当您添加代码块时,解析器才会理解如何为HTML的特定部分切换到C代码


与其重新编写一个已经很好的答案:

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


从另一个角度来看,您希望在服务器端运行的任何代码都应该在
块内,其他所有内容都是客户端。

让我们从一开始就明确一点。您不是在学习aspx,除非您试图了解此文件扩展名,否则您是在学习ASP.Net和更具体的ASP.Net Web表单

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

此标记可以包含纯html、服务器控件(

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

也许你已经看过了,现在你可以发现这是一种语法糖

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

vs


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

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

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