注:因为这个暑假做了一个ASP.NET的项目(WebForms模式),暑假期间太忙没有来得及整理,现在统一梳理下知识(有些我认为可以跟HTML共通的就没记)
推荐几个学习ASP.NET的网站:
W3School
菜鸟教程
书的话。。因为当时项目太紧张。直接动手实战,有不会的直接在上面两个网站查询的。
当时我入门看的书有:
ASP.NET 1.1入门经典-Visual C#.NET 2003编程篇
ASP.NET 3.5 从入门到精通(C#2008版)<—-强推
—–那么,开始ASP.NET学习之旅吧~—–
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本(在服务器上运行的语言)创建网页和网站的开发框架。
ASP.NET 支持三种不同的开发模式:
Web Pages(Web 页面)
MVC(Model View Controller 模型-视图-控制器)
Web Forms(Web 窗体)
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 文件类似 HTML 文件
ASP.NET 文件可以包含 HTML、XML 以及脚本
ASP.NET 文件中的脚本在服务器上执行
ASP.NET 文件的文件后缀是 “.aspx”
从根本上讲,ASP.NET 页面与 HTML 完全相同。
HTML 页面的扩展名是 .htm 或 .html。假如浏览器从服务器请求某张 HTML 页面,服务器不进行任何修改,就会把该页面发往浏览器。
ASP.NET 页面的扩展名是 .aspx。如果浏览器请求某张 ASP.NET 页面,那么在把结果发回浏览器之前,服务器首先会处理页面中的可执行代码。
标记ASP.NET有一组窗体控件,它们的使用与HTML窗体控件相同,两者的主要区别是服务器控件是在请求时在服务器上动态形成的,然后再发送出去。
ASP.NET版本只需要几个字符的编码,如下所示:
<form ID="MyForm" runant="server">
...ASP.NET form...
form>
这个标记只使用了一个属性,即runant=”server”。该属性告知Web服务器应该处理窗体本身,而不是只将它传送到浏览器。所有ASP.NET窗体都用POST方法传送。
标记允许在服务器上处理窗体控件(例如复选框和下拉列表)。ASP.NET对这些控件进行了自定义。
使用ASP.NET窗体控件有几个优点:
传统的 ASP.NET 事件驱动开发模型。
添加了服务器控件、服务器事件以及服务器代码的网页。
WebForm中的控件,其实就是服务器控件。带有runat=”server” 属性,必须在服务器进行处理(如果不进行处理,则会报错)
服务器控件是可被服务器理解的标签。
有三种类型的服务器控件:
HTML 服务器控件是服务器可理解的 HTML 标签。
ASP.NET 中的 HTML 元素是作为文本来进行处理的。要想使这些元素可编程,就需要向这些 HTML 元素添加 runat=”server” 属性。该属性指示,此元素是一个服务器控件。同时要添加 id 属性来标识该服务器控件。该 id 引用可用于操作运行时的服务器控件。
注释:所有 HTML 服务器控件必须位于带有 runat=”server” 属性的 标签内。runat=”server” 属性指示该表单应在服务器进行处理。它同时指示其包括在内的控件可被服务器脚本访问。
以下给出最常用的ASP.NET服务器控件,并与以前使用的HTML窗体标记符进行比较:
ASP.NET 服务器控件 | 对应的HTML窗体标记符 | 作用 |
---|---|---|
|
, |
显示文本 |
|
|
为用户提供一个选项列表,让用户从中选择 |
|
|
以紧凑的方式为用户提供一个选项列表,让用户从中选择 |
|
|
用户输入的可选择内容 |
|
|
允许用户从一个选项列表中做出选择 |
|
|
允许用户打开或关闭一个功能 |
|
|
把用户的输入发送到服务器 |
Web 服务器控件是服务器可理解的特殊 ASP.NET 标签。
类似 HTML 服务器控件,Web 服务器控件也在服务器上创建,它们同样需要 runat=”server” 属性以使其生效。不过,Web 服务器控件没有必要映射任何已存在的 HTML 元素,它们代表更复杂的元素。
创建 Web 服务器控件的语法是:
在下面的例子中,我们在 .aspx 文件中的声明了一个 Button 服务器控件。然后我们为 Click 事件创建了一个事件处理程序,它可修改按钮上的文本:
<script runat="server">
Sub submit(Source As Object, e As EventArgs)
button1.Text="You clicked me!"
End Sub
script>
<html>
<body>
<form runat="server">
<asp:Button id="button1" Text="Click me!" runat="server" OnClick="submit"/>
form>
body>
html>
Validation 服务器控件用于验证用户输入。如果用户输入没有通过验证,将向用户显示一条错误消息。
每种 validation 控件执行一种特定的验证类型(比如验证某个具体的值或者某个范围的值)。
默认地,当点击Button, ImageButton或LinkButton 时,就会执行页面验证。您可通过把 CausesValidation 属性设置为 false,来阻止某个按钮控件被点击时进行验证。
创建 Validation 服务器控件的语法是:
在下面的例子中,我们在 .aspx 文件中声明了一个 TextBox 控件,一个 Button 控件,以及一个 RangeValidator 控件。如果验证失败,文本 “The value must be from 1 to 100!” 将显示在 RangeValidator 控件中:
<html>
<body>
<form runat="server">
<p>Enter a number from 1 to 100:
<asp:TextBox id="tbox1" runat="server" />
<br /><br />
<asp:Button Text="Submit" runat="server" />
p>
<p>
<asp:RangeValidator
ControlToValidate="tbox1"
MinimumValue="1"
MaximumValue="100"
Type="Integer"
Text="The value must be from 1 to 100!"
runat="server" />
p>
form>
body>
html>
每一个Web页面实际上都是一个继承自System.Web.UI.Page类的用户自定义的类。通过从Page基类继承,Web页面获得了大量的属性和方法,以供程序员在代码使用。
这些继承的特性包括了允许缓存功能、验证以及跟踪调试等。
以下简要的列出了Page类一些重要的基本属性
属性 | 描述 |
---|---|
IsPostBack |
IsPostBack是一个布尔值。当IsPostBack属性为false时,表示该页面是第一次被当前用户请求;当IsPostBack属性为true时,表示该页面是响应控件事件而提交的回传请求,此时页面通常在视图状态中保存了页面的相关信息。在页面的Page.Load事件处理方法中,通常检查IsPostBack属性,以判断页面是第一次被当前用户请求还是回传请求,以确保用于初始化Web页面的代码只被执行一次 |
EnableViewState |
该值只是当前页请求结束时,该页是否保持其视图状态,以及是否保持它包含的每一个服务器控件的视图状态。当把Web页面的EnableViewState属性设置为false时,将覆盖页面中所包含的所有控件的EnableViewState属性,此时页面上的所有控件都不能维护控件的状态信息 |
Application |
Application属性是一个保存应用程序级别信息的集合,该集合用于保存当前Web网站中所有被用户共享的信息。例如,可以使用Application集合来记录页面被访问的次数 |
Session |
Session属性是一个保存单个用户会话信息的集合,会话信息可以在不同的多个页面之间共享。例如,在一个电子商务的网站中,可以使用Session集合来保存当前用户的购物车 |
Cathe |
Cathe属性是一个集合,用于保存那些在创建时比较耗费时间的对象,以便在其他用户访问页面时或在其他页面中快速地重用这些对象。适当的使用该技术可以有效提高Web页面的执行性能。 |
Request |
Request属性是一个对当前页面的HttpRequest对象的引用,其中包含了当前Web请求的相关信心。通过HttpRequest对象,可以获得发起请求的客户端浏览器的详细信息,ASP.NET可以自己处理这些细节信息,因而获取这些浏览器详细信息的意义不大。但是,可以使用HttpRequest对象,通过使用查询字符(query string),将信息从一个页面传递给另一个页面。 |
Response |
Response属性是一个对当前页面的HttpResponse对象的引用,它表示ASP.NET将要发送给客户端浏览器的响应。 |
Server |
Server属性是一个队当前页面的HttpServerUtility对象的引用,通过该对象可以执行一些杂项的任务,比如,可以对字符串进行编码,以便这些字符串可以安全的存放在URL中 |
User |
如果访问网站的用户已经通过了验证,则User属性被初始化为当前用户的信息 |
事件驱动编程从本质上改变了编程模型。
利用事件,服务器上不再是以顺序执行的方式完成任务。
代码的执行顺序取决于与用户的交互。
第一组是HTML内部的事件,这些事件可以在页面上发生,并由浏览器在客户端处理。例如:在客户端JavaScripts中运行的弹出工具提示。
第二组是ASP.NET生成页面时自动发生的几个事件(ASP.NET页面级事件)。它们不需要用户干涉,在用户看到页面之前发生,我们使用这些事件建立页面。特别重要的页面级事件是postback,在用户单击提交按钮后,页面重新提交给服务器时触发。
最后一组最大,包含用户与页面交互时发生的所有事件。
例:鼠标点击事件
<html>
<head>
<title>HTML Event Exampletitle>
head>
<body>
<form>
<input onclick="alert('You have raised an event!')"
type="button" value="Click Me"/>
form>
body>
html>
ASP.NET中的一切元素均可归结为对象,特别是page对象。用户创建的每一个Web窗体都是一个page对象。可以将整个Web窗体看成是一个输出为HTML的可执行程序。每当访问服务器时都会经历这些阶段。
在请求ASP.NET Web窗体时,在Web服务器上就会自动发生一系列事件,如下所示:
当初始化页面时发生此事件。可以利用 Page_Init()将该事件与要在.NET在页面上显示控件之前运行的代码建立关联。该事件与Page_Load事件的工作方式相同,但在Page_Load事件之前发生。
如果希望页面上的代码在其他事件发生之前执行,就需要把它们放在Page_Init()事件处理过程中。
支持高级论题,如事务处理。
当整个页面第一次可见时发生(即在页面被读入内存,进行处理时发生),但在利用Page_Init实现某些服务器控件的初始化并显示出这些控件之后发生。
页面加载事件会自动调用Page_Load()事件处理过程。
Page_Load 子例程会在页面每次加载时运行。
如果您仅希望在页面第一次加载时执行 Page_Load 子例程中的代码,您可以使用 Page.IsPostBack 属性。如果 Page.IsPostBack 属性为 false,则页面第一次被载入,如果为 true,则页面传回服务器(例如,通过点击表单上的按钮):
<script runat="server">
Sub Page_Load
if Not Page.IsPostBack then
lbl1.Text="The date and time is " & now()
end if
End Sub
Sub Submit(s As Object, e As EventArgs)
lbl2.Text="Hello World!"
End Sub
script>
<html>
<body>
<form runat="server">
<h3><asp:label id="lbl1" runat="server" />h3>
<h3><asp:label id="lbl2" runat="server" />h3>
<asp:button text="Submit" onclick="submit" runat="server" />
form>
body>
html>
上面的例子仅在页面初次加载时创建 “The date and time is….” 这条消息。当用户点击 Submit 按钮时,submit 子例程将在第二个 label 创建 “Hello World!”,但第一个 label 中的日期和时间不会改变。
页面从IIS内存中卸载并发送给浏览器时发生。在控件事件处理后发生。改事件非常适用于关闭数据库的连接。其名称容易产生误导,因为这个事件并不是浏览器中的用户退出页面或关闭浏览器时发生。术语Unload是从IIS的角度来看的,而不是浏览器。
该事件最适合于结束资源的适用,例如关闭数据库连接。由于Page_Unload()事件是在ASP.NET页面的其他内容完成后执行,所以不能适用他来改变ASP.NET控件。