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
2
3
4
5
6
7
8
9
10
11
12
13
<!-- 单行代码块 -->
@{ var myMessage = "Hello World"; }

<!-- 行内表达式或变量 -->
<p>The value of myMessage is: @myMessage</p>

<!-- 多行代码块 -->
@{
var greeting = "Welcome to our site!";
var weekDay = DateTime.Now.DayOfWeek;
var greetingMessage = greeting + " Today is: " + weekDay;
}
<p>The greeting is: @greetingMessage</p>

VB 的主要 Razor 语法规则

  • Razor 代码块由 @Code … End 包围
  • 行内表达式(变量和函数)以 @ 开始
  • 变量通过 Dim 关键词进行声明
  • 字符串用引用来包围
  • C# 代码对大小写不敏感
  • C# 文件的扩展名是 .vbhtml

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!-- 单行代码块 -->
@Code dim myMessage = "Hello World" End Code

<!-- 行内表达式或变量 -->
<p>The value of myMessage is: @myMessage</p>

<!-- 多行代码块 -->
@Code
dim greeting = "Welcome to our site!"
dim weekDay = DateTime.Now.DayOfWeek
dim greetingMessage = greeting & " Today is: " & weekDay
End Code

<p>The greeting is: @greetingMessage</p>

WP 布局

###内容快

使用 @RenderPage() 方法从不同的文件导入内容。

内容块(来自另一个文件)能够被输入网页中的任意位置,并可包含文本、标记和代码,就像任何常规的网页那样。

1
2
3
4
5
6
7
8
<html>
<body>
@RenderPage("header.cshtml")
<h1>Hello Web Pages</h1>
<p>This is a paragraph</p>
@RenderPage("footer.cshtml")
</body>
</html>

布局页面

创建一致外观的另一种方法是使用布局网页。布局网页包含网页的结构,而不是内容。当网页(内容页)链接到布局页时,它会根据布局页(模板)来显示。

布局页类似普通的网页,但是会在引用内容页的位置调用 @RenderBody() 方法

每个内容页必须以 Layout 指令开头。

布局网页:Layout.cshtml

1
2
3
4
5
6
7
<html>
<body>
<p>This is header text</p>
@RenderBody()
<p>© 2012 W3School. All rights reserved.</p>
</body>
</html>

任意网页:(被包含在布局网页中)

1
2
3
4
5
6
7
8
9
@{Layout="Layout.cshtml";}

<h1>Welcome to W3Schools</h1>

<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit,sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud
exercitation ullamco laborisnisi ut aliquip ex ea commodo consequat.
</p>

防止代码泄露

名称以下划线开头的文件无法通过 web 来浏览。

隐藏敏感信息(数据库密码、电邮密码等)的常用方法是把这些信息保存在名为 “_AppStart” 的独立文件中

_AppStart.cshtml

1
2
3
4
5
6
7
@{
WebMail.SmtpServer = "mailserver.example.com";
WebMail.EnableSsl = true;
WebMail.UserName = "username@example.com";
WebMail.Password = "your-password";
WebMail.From = "your-name-here@example.com";
}

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
2
3
4
URL	       http://www.w3school.com.cn/html/html5_intro.asp
服务器名 w3school
虚拟路径 /html/html5_intro.asp
物理路径 C:\MyWebSites\w3school\/html/html5_intro.asp

~ 操作符

如需在编程代码中规定虚拟根目录,请使用 ~ 操作符。

如果您使用 ~ 操作符,而不是路径,就能够在不改变任何代码的情况下,将网站移动到不同的文件夹或位置:

1
2
var myImagesFolder = "~/images";
var myStyleSheet = "~/styles/StyleSheet.css";

Server.MapPath 方法

Server.MapPath 方法将虚拟路径 (/default.cshtml) 转换为服务器能够理解的物理路径 (C:\Johnny\MyWebSited\Demo\default.cshtml)。

当需要打开位于服务器上的数据文件时,您就会用到该方法(数据文件只能通过完整的物理路径来访问):

1
2
var pathName = "~/dataFile.txt";
var fileName = Server.MapPath(pathName);

Href 方法

Href 方法把代码中的路径转换为浏览器能够理解的路径(浏览器无法理解 ~ 操作符)。

您使用 Href 方法来创建指向资源(比如图片和 CSS 文件)的路径。

您会经常在 HTML 、<a>、<img> 以及 <link> 元素中用到该方法:

1
2
3
4
5
6
@{var myStyleSheet = "~/Shared/Site.css";}

<!-- 创建指向 CSS 文件的链接 -->
<link rel="stylesheet" type="text/css" href="@Href(myStyleSheet)" />

<!-- 同上 : -->

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 在被请求页面之前运行。