Aspx代码块与runat服务器

时间:2012-04-11 14:37:29

标签: c# asp.net

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

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

现在我不明白的是,如果表单已经在服务器上运行,为什么我们需要&lt; %%&gt;代码块再次?也许我不理解代码块和页面上服务器上的整个运行之间的区别。任何人都可以澄清我对这里发生的事情的误解吗?我只是不太了解aspx页面的服务器端与客户端术语。

我也见过这样的代码:

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

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

<% If dataExists(whatever) Then %>
HelloWorld

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

6 个答案:

答案 0 :(得分:2)

让我们从一开始就明确一件事。您没有学习 aspx ,除非您正在尝试查找此文件扩展名,否则您正在学习 ASP .Net 并且更具体 ASP .Net Web表单

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

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

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

可能你见过this example,现在你可以发现这是一种语法糖。

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

VS

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

代码块只是允许处理引擎知道要执行的页面的哪些部分(没有那么就很难分辨出页面的哪些部分是代码而哪些只是标记)。

答案 4 :(得分:0)

代码块是从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

答案 5 :(得分:0)

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

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