ASP.NET 简介
ASP.NET 是新一代的 ASP。它无法兼容经典 ASP,但 ASP.NET 可以引用 ASP。
ASP.NET 页面需要编译,因此比经典 ASP 更快。
ASP.NET 拥有更好的语言支持,大量用户控件,基于 XML 的组件,以及对用户认证的整合。
ASP.NET 页面的扩展名是 .aspx,通常由 VB (Visual Basic) 或 C# (C sharp) 编写。
ASP.NET 中的用户控件可以通过不同的语言进行编写,包括 C++ 和 Java。
当浏览器请求 ASP.NET 文件时,ASP.NET 引擎读取该文件,编译并执行文件中的脚本,然后以纯 HTML 向浏览器返回结果。
扩展名
- ASP 文件的文件扩展名是 .asp
- ASP.NET 文件的文件扩展名是 .aspx
- ASP.NET 文件使用 C# 语法的文件扩展名是 .cshtml
- ASP.NET 文件使用 Razor VB 语法的文件扩展名是 .vbhtml
WP 教程
Web Pages 是三种 ASP.NET 编程模型中的一种,用于创建 ASP.NET 网站和 web 应用程序。
其他两种编程模型是 Web Forms 和 MVC (Model, View, Controller)。
Web Pages 是最简单的 ASP.NET 网页开发编程模型。它提供了一种简单的方法将 HTML、CSS、JavaScript 以及服务器代码结合起来。
WP Razor
- Razor 是一种向网页添加基于服务器的代码的标记语法
- Razor 拥有传统 ASP.NET 标记的能力,但是更易学习,更易使用
- Razor 是一种类似 ASP 和 PHP 的服务器端标记语法
- Razor 支持 C# 和 Visual Basic 编程语言
1 | <p>The time is @DateTime.Now</p> |
包含常规的 HTML 标记,此外还包含:由 @ 标记的 Razor 代码。
C# 的主要 Razor 语法规则
- Razor 代码块由 @{ … } 包围
- 行内表达式(变量和函数)以 @ 开始
- 代码语句以分号结束
- 变量通过 var 关键词进行声明
- 字符串用引用来包围
- C# 代码对大小写敏感
- C# 文件的扩展名是 .cshtml
实例
1 | <!-- 单行代码块 --> |
VB 的主要 Razor 语法规则
- Razor 代码块由 @Code … End 包围
- 行内表达式(变量和函数)以 @ 开始
- 变量通过 Dim 关键词进行声明
- 字符串用引用来包围
- C# 代码对大小写不敏感
- C# 文件的扩展名是 .vbhtml
实例
1 | <!-- 单行代码块 --> |
WP 布局
###内容快
使用 @RenderPage()
方法从不同的文件导入内容。
内容块(来自另一个文件)能够被输入网页中的任意位置,并可包含文本、标记和代码,就像任何常规的网页那样。
1 | <html> |
布局页面
创建一致外观的另一种方法是使用布局网页。布局网页包含网页的结构,而不是内容。当网页(内容页)链接到布局页时,它会根据布局页(模板)来显示。
布局页类似普通的网页,但是会在引用内容页的位置调用 @RenderBody()
方法。
每个内容页必须以 Layout
指令开头。
布局网页:Layout.cshtml
1 | <html> |
任意网页:(被包含在布局网页中)
1 | @{Layout="Layout.cshtml";} |
防止代码泄露
名称以下划线开头的文件无法通过 web 来浏览。
隐藏敏感信息(数据库密码、电邮密码等)的常用方法是把这些信息保存在名为 “_AppStart” 的独立文件中
_AppStart.cshtml
1 | @{ |
WP 文件夹
ASP.NET 网页的典型文件夹结构:
- “Account” 文件夹包含登录和安全文件
- “App_Data” 文件包含数据库和数据文件
- “Images” 文件夹包含图片
- “Scripts” 文件夹包含浏览器脚本
- “Shared” 文件夹包含通用文件(比如布局和样式文件)
物理文件结构
类似:C:\Johnny\Documents\MyWebSites\Demo\Images
URL 和路径
URL 用于从 web 访问文件:
http://www.w3school.com.cn/html5/html5_intro.asp
URL 在服务器上对应的文件是:
C:\MyWebSites\htm5\html5_intro.asp
1 | URL http://www.w3school.com.cn/html/html5_intro.asp |
~ 操作符
如需在编程代码中规定虚拟根目录,请使用 ~ 操作符。
如果您使用 ~ 操作符,而不是路径,就能够在不改变任何代码的情况下,将网站移动到不同的文件夹或位置:
1 | var myImagesFolder = "~/images"; |
Server.MapPath 方法
Server.MapPath 方法将虚拟路径 (/default.cshtml) 转换为服务器能够理解的物理路径 (C:\Johnny\MyWebSited\Demo\default.cshtml)。
当需要打开位于服务器上的数据文件时,您就会用到该方法(数据文件只能通过完整的物理路径来访问):
1 | var pathName = "~/dataFile.txt"; |
Href 方法
Href 方法把代码中的路径转换为浏览器能够理解的路径(浏览器无法理解 ~ 操作符)。
您使用 Href 方法来创建指向资源(比如图片和 CSS 文件)的路径。
您会经常在 HTML 、<a>、<img> 以及 <link> 元素中用到该方法:
1 | @{var myStyleSheet = "~/Shared/Site.css";} |
WP 全局
Web 启动之前:_AppStart
假如站点根目录中名为 _AppStart 的页面存在,ASP.NET 会在站点内的任何页面被请求之前首先运行这个页面。
通常 _AppStart 用于启动代码和全局值的初始化,比如计数器和全局名称。
注释 1:_AppStart 的文件扩展名应与网页相同,比如 _AppStart.cshtml。
注释 2:_AppStart 有下划线前缀。正因如此,用户才无法直接查看该文件
每张页面之前:_PageStart
就像在站点启动前运行 _AppStart 那样,您能够在每个文件夹中的任意页面之前运行代码。
对于 web 中的每个文件夹,您能够添加名为 _PageStart 的文件。
通常 _PageStart 用于设置文件夹中所有页面的布局文件,或者在运行页面之前检查用户登录。
当请求到来时,ASP.NET 检查 _AppStart 是否存在。如果存在,并且这是对站点的第一次请求,则运行 _AppStart。
然后 ASP.NET 检查 _PageStart 是否存在。如果存在,则运行 _PageStart,在被请求的页面之前。
如果您在 _PageStart 内部引用了对 RunPage() 的调用,那么您可以规定在何处运行被请求的页面。否则,_PageStart 在被请求页面之前运行。