我正在学习一些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
现在为什么不能在上面删除代码块?我的意思是在服务器标签中,该代码已经在运行服务器端并发出一些写请求。然后你有代码块正在做一些逻辑检查再次写入。为何分开这些?他们是不是同样的功能,还是我错过了什么?
答案 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处理任何可执行代码,即<% ... %>
块内的任何代码,然后将其结果发送回浏览器。
另一种看待它的方法是你想要运行服务器端的任何代码应该在<% ... %>
块内,其他一切都是客户端。