![ASP.NET从入门到精通(第5版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/771/27111771/b_27111771.jpg)
1.4 ASP.NET网页语法
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P36_13492.jpg?sign=1738929470-pIVLj5LSPoU2GDkijSzj1f55oPE6wnpW-0-edcc431d38003bd4e067ccde11235416)
视频讲解
1.4.1 ASP.NET网页扩展名
网站应用程序中可以包含很多文件类型。例如,在ASP.NET中经常使用的ASP.NET Web窗体页就是以.aspx为扩展名的文件。关于ASP.NET网页其他扩展名的具体描述如表1.3所示。
表1.3 ASP.NET网页扩展名
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-T36_13503.jpg?sign=1738929470-38sTHp8unyDwQazzK1RhSTm8kkhwDSOP-0-195b42ca2a25d33d65983f03f82034a8)
1.4.2 页面指令
ASP.NET页面中的前几行一般是<%@…%>这样的代码,这叫作页面的指令,用来定义ASP.NET页分析器和编译器使用的特定于该页的一些定义。在.aspx文件中使用的页面指令一般有以下几种。
1. <%@Page%>
通过<%@Page%>指令可定义ASP.NET页分析器和编译器使用的属性,一个页面只能有一个这样的指令。
2. <%@Import Namespace="Value"%>
通过<%@Import Namespace="Value"%>指令可将命名空间导入ASP.NET应用程序文件中,一个指令只能导入一个命名空间,如果要导入多个命名空间,应使用多个@Import指令来执行。有的命名空间是ASP.NET默认导入的,没有必要再重复导入。
说明
ASP.NET 4.0默认导入的命名空间包括System、System.Configuration、System.Data、System.Linq、System.Web、System.Web.Security、System.Web.UI、System.Web.UI.HtmlControls、System.Web.UI.WebControls、System.Web.UI.WebControls.WebParts和System.Xml.Linq。
3. <%@OutputCache%>
通过<%@OutputCache%>指令可设置页或页中包含的用户控件的输出缓存策略。
4. <%@Implements Interface="接口名称"%>
<%@Implements Interface="接口名称"%>指令用来定义要在页或用户控件中实现的接口。
5. <%@Register%>
<%@Register%>指令用于创建标记前缀和自定义控件之间的关联关系,有以下3种写法。
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P37_86338.jpg?sign=1738929470-lEPw6foRw5niY7p6OPx2FCyqdjb1TK6i-0-441f3e64452f36677b6e86e40ab1078b)
- ☑ tagprefix:提供对包含指令的文件中所使用的标记的命名空间的短引用的别名。
- ☑ namespace:正在注册的自定义控件的命名空间。
- ☑ tagname:与类关联的任意别名。此属性只用于用户控件。
- ☑ src:与tagprefix:tagname对关联的声明性用户控件文件的位置,可以是相对的地址,也可以是绝对的地址。
- ☑ assembly:与tagprefix属性关联的命名空间的程序集,程序集名称不包括文件扩展名。如果将自定义控件的源代码文件放置在应用程序的App_Code文件夹下,ASP.NET 4.0在运行时会动态编译源文件,因此不必使用assembly属性。
1.4.3 ASPX文件内容注释
服务器端注释(<%--注释内容--%>)允许开发人员在ASP.NET应用程序文件的任何部分(除了<script>代码块内部)嵌入代码注释。服务器端注释元素的开始标记和结束标记之间的任何内容,不管是ASP.NET代码还是文本,都不会在服务器上进行处理或呈现在结果页上。
例如,使用服务器端注释TextBox控件,代码如下:
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P38_86339.jpg?sign=1738929470-QLf2iY8LMHLVQKBRpG3454BzRqOUVGGq-0-ca2c03985ab530384d34d0ae2df150be)
执行后,浏览器中将不显示此文本框。
如果<script>代码块中的代码需要注释,则使用HTML代码中的注释(<!--注释//-->)。此标记用于告知浏览器忽略该标记中的语句。例如:
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P38_86340.jpg?sign=1738929470-N67Sw0VKGoHuN8p3btZ1sJ0gHaAoGVje-0-5c8b0f3a9f09197615ed26252bcb9c0c)
注意
服务器端注释用于页面的主体,但不在服务器端代码块中使用。当在代码声明块(包含在<script runat="server"></script>标记中的代码)或代码呈现块(包含在<%%>标记中的代码)中使用特定语言时,应使用用于编码的语言的注释语法。如果在<% %>块中使用服务器端注释块,则会出现编译错误。开始和结束注释标记可以出现在同一行代码中,也可以由许多被注释掉的行隔开。服务器端注释块不能被嵌套。
1.4.4 服务器端文件包含
服务器端文件包含用于将指定文件的内容插入ASP.NET文件中,这些文件包括网页(.aspx文件)、用户控件文件(.ascx文件)和Global.asax文件。包含文件是在编译之前被包含的文件按原始格式插入到原始位置,相当于将两个文件组合为一个文件,两个文件的内容必须符合.aspx文件的要求。
语法如下:
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P39_86343.jpg?sign=1738929470-tUZ3CrxTKFmGZPMpLELNUEPOjLZB2W5H-0-26ac0ce5f1f5ca6fa1da62687d80d725)
- ☑ file:文件名是相对于包含带有#include指令的文件目录的物理路径,此路径可以是相对的。
- ☑ virtual:文件名是网站中虚拟目录的虚拟路径,此路径可以是相对的。
注意
使用file属性时包含的文件可以位于同一目录或子目录中,但该文件不能位于带有#include指令的文件的上级目录中。由于文件的物理路径可能会更改,因此建议采用virtual属性。
例如,使用服务器端包含指令语法调用将在ASP.NET页上创建页眉的文件,这里使用的是相对路径,代码如下:
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P39_86346.jpg?sign=1738929470-wKU5i4STCB11OkXkCQupRVIBlfrFBvNs-0-2d50c3113acf53410ec80193ace7a7c8)
注意
赋予file或virtual属性的值必须用引号("")括起来。
1.4.5 HTML服务器控件语法
默认情况下,ASP.NET文件中的HTML元素作为文本进行处理,页面开发人员无法在服务器端访问文件中的HTML元素。要使这些元素可以被服务器端访问,必须将HTML元素作为服务器控件进行分析和处理,这可以通过为HTML元素添加runat="server"属性来完成。服务器端通过HTML元素的id属性引用该控件。
语法如下:
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P39_86349.jpg?sign=1738929470-OMaQQF8FmHKRG9TaJI8Du5Dj3LwB2pcn-0-e9982299a0f4c924ab30bf2df40002d6)
例如,使用HTML服务器端控件创建一个简单的Web应用程序,单击Red按钮将Web页的背景改为红色,程序代码如下:
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P39_10608.jpg?sign=1738929470-Q4drZ1BieANhk43eEpcrnXcGDuLAptRL-0-3563370016c4a9eb16bb110132acf095)
运行结果如图1.41所示。
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P40_13644.jpg?sign=1738929470-i1Y1en1GoVxtHp8bZ0vZiOQ5TXnkabfy-0-cf78c7a82356a2599b283c855bc77da7)
图1.41 HTML服务器控件举例
注意
HTML服务器控件必须位于具有runat="server"属性的<form>标记中。
1.4.6 ASP.NET服务器控件语法
ASP.NET服务器控件比HTML服务器控件具有更多的内置功能。Web服务器控件不仅包括窗体控件(如按钮和文本框),而且还包括特殊用途的控件(如日历、菜单和树视图控件)。Web服务器控件比HTML服务器控件更抽象,因为其对象模型不一定反映HTML语法。
语法如下:
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P40_86354.jpg?sign=1738929470-iXTXNGDruKnN7eTmtLMT8kF5fy6wtunu-0-e73f70a8f68e1e9fd3d44ee6b91487c6)
例如,使用服务器端控件语法添加控件,程序代码如下:
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P40_86355.jpg?sign=1738929470-sJIHZBWqgxRRVIuzT0rHAjQCpd1VpPdt-0-3c4e124cbc9f20e79b510ec11fe43b38)
注意
在以上代码中,必须将<script>标记内的language属性设置为C#,否则<script>标记内不支持使用C#代码。
1.4.7 代码块语法
代码块语法是定义网页呈现时所执行的内嵌代码。定义内嵌代码的语法标记元素为:
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P41_86357.jpg?sign=1738929470-6z6cywXUB9k9MmHFICtLFrVEh91BZIM2-0-d82ec198b970e5779cea84b51cae8e0e)
例如,使用代码块语法,根据系统时间显示“上午好!”或“下午好!”,具体代码如下:
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P41_86358.jpg?sign=1738929470-6Fa5lBYX1MHNKk8JXxrLOhqkYdIFItOG-0-f2b61884e9b460cb70feb21defec533e)
说明
在以上代码中,DateTime对象用于表示时间上的一刻,通常以日期和当天的时间表示。其包含在System命名空间中。
1.4.8 表达式语法
定义内嵌表达式使用的语法标记元素为:
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P41_86363.jpg?sign=1738929470-itvWHB8YSwYpGiyaGRU5nLxxnlyx71g3-0-37980a53f48fac40100043fea662876b)
例如,在网页上显示字体大小不同的文本,代码如下:
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P41_86364.jpg?sign=1738929470-VHjW2KdJ480BhkVlTWJ1JvpEn969Cf7A-0-3b5797daa684b17f62125a23e7bcb299)
说明
在以上代码中,使用for循环语句执行6次循环内容。